
我啟動了以下個性化主題 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
對於命名目錄:別名為with 的目錄hash -d foo=…
;~[bar]
為一個動態命名目錄。
您可以使用%/
代替%~
.這從不使用任何目錄縮寫。
如果您想要更高級,您可以執行自己的程式碼來確定目前目錄的顯示方式。一種方法是在提示字串內使用參數替換。這需要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
.
只有一個chpwd
函數,所以不要覆蓋 oh-my-zsh 的函數。 Oh-my-zshchpwd
呼叫數組中的函數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%}'
如果您想要縮寫使用者的主目錄而不是命名目錄,您可以在子 shell 中清除主目錄並使用%
參數擴展標誌在子 shell 中執行自動縮寫。
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
將其禁用。