私はタイリングウィンドウマネージャーを使用していて、複数のタブを持つgnome-terminal
から、ウィンドウマネージャーによって管理される複数のurxvt
インスタンスに切り替えました。私が見逃している機能の1つは、デフォルトで最後の端末の作業ディレクトリーになっている新しい端末を開く機能です。
要するに:デフォルトで最後に使用したものの$ PWDになる新しいurxvt(bash)を開く方法が必要です。
私の頭に浮かぶ唯一の解決策は、すべてのcd
の現在のパスを次のようなもので保存することです:
echo $PWD > ~/.last_dir
次のようにして、新しい端末のパスを復元します。
cd `cat ~/.last_dir`
2番目のコマンドを.bashrc
で調達できますが、ディレクトリが変更されるたびに最初のコマンドを実行する方法がわかりません:)
screen
またはtmux
の使用を含まない、より簡単なソリューションは大歓迎です。
.last_dir
を使用した3つのソリューションが表示されます。 echo $PWD > ~/.last_dir
は次のいずれかで配置できます。
cd
のラッパーとなる特別な関数では:
function cd_
{
[[ -d "$@" ]] || return 1
echo "$@" > ~/.last_dir
cd "$@"
}
これを~/.bashrc
に配置し、新しい作業ディレクトリを保存するたびに、cdの代わりにcd_
を使用します。
$Prompt_COMMAND
(非推奨):
Prompt_COMMAND="$Prompt_COMMAND; pwd > ~/.last_dir"
端末から直接テストするか、~/.bashrc
に配置できます。ただし、このソリューションでは、プロンプトが表示されるたびにディスクの書き込みがトリガーされるため、問題が発生する可能性があります。一方、.last_dir
には、そこに到達した方法に関係なく、現在のディレクトリが含まれます。
カスタムPerl拡張スクリプト for rxvt
。自分で作成したことはありませんが、ウェブ上でかなりの数の例を見つけることができます。
現在、このバージョンの#1ソリューションを使用しています
# save path on cd
function cd {
builtin cd $@
pwd > ~/.last_dir
}
# restore last saved path
if [ -f ~/.last_dir ]
then cd `cat ~/.last_dir`
fi
私の内部.zshrc
これは実際にはかなり簡単です。既存のurxvt
ウィンドウ内からurxvt
を実行すると、新しいウィンドウは同じディレクトリに作成されます。このため、dup
をurxvt &
にエイリアスしています。ホットキーにバインドしたい場合は、bashのbind
コマンドを使用できます。たとえば、それをバインドするには F1:
$ bind '"\e[11~": "urxvt &\n"'
. /etc/profile.d/vte.sh
に~/.bashrc
を追加するだけで、同じ機能を利用できます
もちろん、これはcd
の動作を変更するための実用的なアプローチですが、もっと簡単な解決策を示したいと思います。 man bash(1) で、インタラクティブな bash が存在する場合、~/.bash_logout
存在する場合。したがって、cd
を呼び出すたびにパスを保存する代わりに、最後のパスを終了時に保存できます。
ぼくの ~/.bash_logout
は非常にシンプルです。
echo $PWD >~/.lastdir
そして、私のどこかに.bashrc
私はこの行を配置しました:
[ -r ~/.lastdir ] && cd $(<~/.lastdir)
多くの場合、一度に複数のターミナルウィンドウを使用し、それぞれに複数のタブが含まれています。例:ソースコード開発タブ用の1つのウィンドウ、latexファイル用の1つのウィンドウ、R実行とスクリプト用の1つのウィンドウなど。 (これは以前は機能していましたが、新しいgnomeバージョンでは、どういうわけか機能しません)。次の汚い解決策は私にとってはうまくいきます。これを.bashrcに入れました。
dirfilename="/tmp/.lastdir-$WINDOWID"
[ -r "$dirfilename" ] && {
savdir=`cat $dirfilename`
cd "$savdir"
}
function cd ()
{
builtin cd "$@"
echo $PWD > $dirfilename
}