A sequência de escape do prompt %~
(incluída em $current_dir
) expande para o diretório atual, levando em conta abreviações. As abreviaturas são:
-
~
para o seu diretório inicial; -
~joe
para o diretório inicial do usuáriojoe
; -
~foo
para um diretório nomeado: o diretório com alias parafoo
comhash -d foo=…
; -
~[bar]
para um diretório denominado dinâmico .
Você pode usar %/
em vez de %~
. Isso nunca usa qualquer abreviação de diretório.
Se você quiser ser mais chique, você pode executar seu próprio código para determinar como o diretório atual é exibido. Uma abordagem é usar uma substituição de parâmetro dentro da string de prompt. Isso requer que a opção prompt_subst
seja definida, o que oh-my-zsh faz (caso contrário: setopt prompt_subst
). O diretório atual está sempre disponível no parâmetro PWD
. Aqui está uma versão simples que apenas encurta seu diretório pessoal para ~
:
local current_dir='%{$terminfo[bold]$fg[cyan]%} ${${PWD/#%$HOME/~}/#$HOME\//~/}%{$reset_color%}'
${${PWD/#%$HOME/\~}/#$HOME\//\~/}
significa: se $PWD
for exatamente igual a $HOME
, defina o resultado como ~
, caso contrário, defina o resultado como $PWD
; em seguida, se o resultado atual começar com $HOME/
, substitua esse prefixo por ~/
, caso contrário, deixe o resultado inalterado.
Uma abordagem mais clara é manter um parâmetro contendo uma versão bem impressa do diretório atual. Atualize esse parâmetro na função chpwd
que é executada em todas as alterações de diretório atuais . Também inicialize esse parâmetro no seu .zshrc
.
Existe apenas uma função chpwd
, por isso não substitua as de oh-my-zsh. O chpwd
de Oh-my-zsh chama a função na matriz chpwd_functions
, então adicione a sua à matriz.
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%}'
Se você quiser abreviar os diretórios iniciais dos usuários, mas não os diretórios nomeados, poderá limpar os diretórios base em uma subshell e usar o %
Flash de expansão do parâmetro para executar as abreviaturas automáticas na subshell.
function my_update_pretty_PWD {
pretty_PWD=$(hash -rd; print -lr -- ${(%)PWD})
}
Ou se preferir a abordagem em linha:
local current_dir='%{$terminfo[bold]$fg[cyan]%} $(hash -rd; print -lr -- ${(%)PWD})%{$reset_color%}'