我激活了以下个性化主题 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
将其禁用。