次のパーソナライズテーマを有効にしました oh-my-zsh
(最新バージョンzsh
とoh-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-zsh
zsh
答え1
これプロンプトエスケープシーケンス %~
(に含まれる$current_dir
)省略形を考慮して現在のディレクトリに展開します。略称:
~
ホームディレクトリの場合~joe
ユーザーのホームディレクトリですjoe
。~foo
foo
名前付きディレクトリの場合:エイリアスがあります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つだけなので、chpwd
oh-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
無効にするには、コマンドを使用します。