.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
Theпоследовательность быстрого выхода %~
(включено в $current_dir
) расширяется до текущего каталога, принимая во внимание сокращения. Сокращения:
~
для вашего домашнего каталога;~joe
для домашнего каталога пользователяjoe
;~foo
для именованного каталога: каталог, которому присвоенfoo
псевдоним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
Функция hook, которая выполняется при каждом изменении текущего каталога. Также инициализируйте этот параметр в вашем .zshrc
.
Там только одна 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
Чтобы отключить его, используйте команду .