%20%E3%81%A7%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B.png)
私は以下のパーソナライズされたテーマを有効にしています 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
無効にします。