zshがCW​​Dでエイリアスを使用するのを防ぐ(ヒント)

zshがCW​​Dでエイリアスを使用するのを防ぐ(ヒント)

次のパーソナライズテーマを有効にしました oh-my-zsh(最新バージョンzshoh-my-zsh):

local return_code="%(?..%{$fg[red]%}%? %{$reset_color%})"

local user_host='%{$terminfo[bold]$fg[green]%}%n @ %m%{$reset_color%}'
local current_dir='%{$terminfo[bold]$fg[cyan]%} %~%{$reset_color%}'
local rvm_ruby=''
local git_branch='$(git_prompt_info)%{$reset_color%}'

PROMPT="${user_host} %D{[%a, %b %d %I:%M:%S]} ${current_dir} ${rvm_ruby} ${git_branch}
%B$%b "
RPS1="${return_code}"

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}‹"
ZSH_THEME_GIT_PROMPT_SUFFIX="› %{$reset_color%}"

プロンプトで、ディレクトリにエイリアスがあるたびに、実際のパスではなくエイリアス名が現在のディレクトリとして表示されることを確認しました。この機能は興味深い機能ですが、無効にしたいと思います。

私は比較に初めて触れましたが、これが機能かどうかはoh-my-zshよくわかりません。しかし、どのように無効にしますか?oh-my-zshzsh

答え1

これプロンプトエスケープシーケンス %~(に含まれる$current_dir)省略形を考慮して現在のディレクトリに展開します。略称:

  • ~ホームディレクトリの場合
  • ~joeユーザーのホームディレクトリですjoe
  • ~foofoo名前付きディレクトリの場合:エイリアスがありますhash -d foo=…
  • ~[bar]一つのために動的に名前が付けられたディレクトリ

%/代わりに使用できます%~。これはディレクトリの省略形を使用しません。

より高度な機能を使用するには、独自のコードを実行して現在のディレクトリの表示方法を決定できます。 1つの方法は、プロンプト文字列でパラメータ置換を使用することです。これが必要ですprompt_subst設定するオプションであるoh-my-zshがこれを行います(そうでない場合setopt prompt_subst:)。現在のディレクトリは常にパラメータで使用できます。PWD。以下は、ホームディレクトリを次のように短縮する簡単なバージョンです~

local current_dir='%{$terminfo[bold]$fg[cyan]%} ${${PWD/#%$HOME/~}/#$HOME\//~/}%{$reset_color%}'

${${PWD/#%$HOME/\~}/#$HOME\//\~/}意味: が$PWDとまったく同じ場合は$HOME結果を に設定し~、そうでない場合は結果を に設定します$PWD。現在の結果がで始まる場合は$HOME/この接頭辞をに置き換え~/、それ以外の場合は結果を変更せずに残します。

よりきれいなアプローチは、現在のディレクトリの見栄えの良い印刷バージョンを含むパラメータを維持することです。このパラメータの更新chpwd現在のディレクトリが変更されるたびに実行されるフック機能。また、あなたの.zshrc

機能は1つだけなので、chpwdoh-my-zshの機能をオーバーライドしないでください。 Oh-my-zshはchpwd配列の関数を呼び出しますので、chpwd_functions配列に関数を追加してください。

function my_update_pretty_PWD {
  case $PWD in
    $HOME(/*)#) pretty_PWD=\~${PWD#$HOME};;
    *) pretty_PWD=$PWD;;
  esac
}
chpwd_functions+=(my_update_pretty_PWD)
my_update_pretty_PWD
local current_dir='%{$terminfo[bold]$fg[cyan]%} ${pretty_PWD}%{$reset_color%}'

ディレクトリ名を指定するのではなく、ユーザーのホームディレクトリを短くするには、サブシェルからホームディレクトリを消去して次のように使用できます。% パラメータ拡張フラグサブシェルで自動略語を実行します。

function my_update_pretty_PWD {
  pretty_PWD=$(hash -rd; print -lr -- ${(%)PWD})
}

またはインラインアプローチを好む場合:

local current_dir='%{$terminfo[bold]$fg[cyan]%} $(hash -rd; print -lr -- ${(%)PWD})%{$reset_color%}'

答え2

このauto_name_dirsオプションはこの動作を担当します。

unsetopt auto_name_dirs無効にするには、コマンドを使用します。

関連情報