Zsh: Expandindo nomes de diretório hashed no prompt

3

Estou experimentando mover do bash para o zsh e, em particular, com a função hash; para que

hash -d Do=~/Downloads

significa que posso inserir cd Do para mover imediatamente para esse diretório. Agradável. Mas no prompt, o diretório é dado como ~Do em vez de ~/Downloads , que é o que eu preferiria ver. Existe alguma maneira de usar valores de hash de diretório para que o prompt seja expandido para o nome completo do diretório (com um% inicial ~ no diretório do usuário)?

    
por Alasdair 22.11.2014 / 04:15

2 respostas

1

O escape %~ abrevia o diretório atual usando diretórios hash quando possível. Para parar de usar abreviações de diretório, você pode usar %/ , mas isso também não abrevia o diretório home.

Para abreviar apenas o diretório base, defina a opção prompt_subst pode exigir a adição de barras invertidas adicionais em locais no seu prompt). Em vez de %~ ou %/ , use uma expansão manual de $PWD .

setopt prompt_subst
PS1='%B${${PWD/#%$HOME%/\~\/}/#$HOME/\~}\$%b '

Se você deseja realizar substituições mais complexas, defina uma variável na chpwd ligar e usá-lo em seu prompt. Mesmo para o caso simples mostrado acima, essa abordagem é mais detalhada, mas possivelmente mais legível.

setopt prompt_subst
chpwd () {
  case $PWD in
    $HOME/*) prompt_PWD=\~/${PWD#$HOME};;
    $HOME) prompt_PWD=\~;;
    *) prompt_PWD=$PWD;;
  esac
}
PS1='%B$prompt_PWD\$%b '

Você pode preferir uma abordagem híbrida que expanda apenas determinados diretórios hash. É fácil conectar-se à abordagem chpwd (ou mesmo à abordagem direta, mas é menos legível). Por exemplo, o comando chpwd a seguir abrevia apenas os diretórios que começam com /home (presumivelmente, os diretórios iniciais de outros usuários) e que não estão em seu diretório inicial.

chpwd () {
  case $PWD in
    $HOME/*) prompt_PWD=\~/${PWD#$HOME};;
    $HOME) prompt_PWD=\~;;
    /home/*) prompt_PWD=${(%)${:-%~}};;
    *) prompt_PWD=$PWD;;
  esac
}
    
por 23.11.2014 / 21:29
0

Adicionar um / à direita ao nome do diretório alcançaria o efeito desejado.

    
por 20.05.2015 / 00:19

Tags