Zsh:プロンプトでハッシュディレクトリ名を拡張する

Zsh:プロンプトでハッシュディレクトリ名を拡張する

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
}

おすすめ記事