bashからzshに、特にハッシュ関数に移行しようとしています。
hash -d Do=~/Downloads
cd Do
つまり、そのディレクトリにすぐに入力して移動できます。わかりましたが、プロンプトで提供されたディレクトリは私が期待していたディレクトリ~Do
ではありません。プロンプトが完全なディレクトリ名(ユーザーディレクトリの~/Downloads
初期ifを含む)に拡張されるようにディレクトリハッシュを使用する方法はありますか?~
ベストアンサー1
これ早く脱出 %~
可能な限り、ハッシュされたディレクトリを使用して現在のディレクトリを短縮します。ディレクトリの省略形の使用を中止するには、代わりに使用できますが、%/
ホームディレクトリも省略されません。
ホームディレクトリのみを短縮するには、次のように設定します。prompt_subst
オプション(プロンプトに追加のバックスラッシュを追加する必要があるかもしれません)または代わりに手動拡張を使用してください%~
。%/
$PWD
setopt prompt_subst
PS1='%B${${PWD/#%$HOME%/\~\/}/#$HOME/\~}\$%b '
より複雑な置換を実行するには、次のようにします。chpwd
接続してプロンプトで使用してください。上記の単純なケースでも、このアプローチはより冗長ですが、おそらくより読みやすくなります。
setopt prompt_subst
chpwd () {
case $PWD in
$HOME/*) prompt_PWD=\~/${PWD#$HOME};;
$HOME) prompt_PWD=\~;;
*) prompt_PWD=$PWD;;
esac
}
PS1='%B$prompt_PWD\$%b '
特定のハッシュディレクトリのみを拡張するハイブリッドアプローチを好むこともできます。これはchpwd
メソッド(または直接メソッドに挿入するのは簡単ですが、読みやすくはありません)に挿入するのは簡単です。たとえば、次のコマンドは(おそらく他のユーザーのホームディレクトリ)で始まり、自分のホームディレクトリの下にないchpwd
ディレクトリだけを短縮します。/home
chpwd () {
case $PWD in
$HOME/*) prompt_PWD=\~/${PWD#$HOME};;
$HOME) prompt_PWD=\~;;
/home/*) prompt_PWD=${(%)${:-%~}};;
*) prompt_PWD=$PWD;;
esac
}