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; -
~joepara o diretório inicial do usuáriojoe; -
~foopara um diretório nomeado: o diretório com alias parafoocomhash -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%}'