zsh cdpath e autocompletion

3

Meu CDPATH no zsh se parece com isso:

export CDPATH='.:..:../..'

Infelizmente, isso significa que, quando tento preencher automaticamente depois de digitar "cd", há muitas opções de preenchimento automático irrelevantes, dependendo de onde eu estou. Por exemplo, se eu estiver no meu diretório inicial, digitar cd tentará preencher automaticamente todos os usuários no sistema porque o CDPATH tem ".."

Existe uma maneira de manter meu CDPATH como mostrado acima, mas ter o autocomplete para cd, pushd, etc. ignorar o valor de CDPATH e autocompletar somente com base no diretório atual?

PonyEars
fonte

Respostas:

7

path-directories

Uma maneira é adicionar as seguintes configurações de conclusão .zshrcpara remover path-directoriesas fontes de sugestão.

zstyle ':completion:*:complete:(cd|pushd):*' tag-order \
    'local-directories named-directories'

nomes de grupos

Como alternativa ou adicionalmente, as configurações a seguir devem exibir um cabeçalho para todos os respectivos grupos de sugestões de conclusão, para que você possa ver quais diretórios são diretórios locais e quais são sugestões do seu cdpath.

zstyle ':completion:*' group-name ''
zstyle ':completion:*:descriptions' format %d

Você pode aplicar formatos de prompt padrão a essas descrições para destacá-los:

zstyle ':completion:*:descriptions' format %B%d%b        # bold
# zstyle ':completion:*:descriptions' format %S%d%s        # invert/standout
# zstyle ':completion:*:descriptions' format %U%d%u        # underline
# zstyle ':completion:*:descriptions' format %F{green}%d%f # green foreground
# zstyle ':completion:*:descriptions' format %K{blue}%d%k  # blue background
# etc.

Isso ajuda a entender um pouco as diferentes fontes da minha experiência.


Nota 1 : zshtem duas representações para variáveis ​​de matriz como PATHe CDPATH, das quais a variante de minúscula é uma matriz real. Isso significa que você pode:

cdpath=(path/to/dir /path/to/another/dir)

Ou, para obter o resultado desejado:

cdpath=(.. ../..)

Pessoalmente, acho que é um pouco mais legível do que o pseudo array separado por dois pontos.

Nota 2 : A exportação CDPATHnão é necessária, a menos que você tenha vários programas que desejam definir.

peth
fonte
1
Isso é ótimo. Obrigado não só por me dar exatamente a resposta que eu estava procurando, mas também me apontar coisas muito úteis, como agrupamento e formatação (e até mesmo a dica do verdadeiro array) que eu nem pensaria em explorar!
PonyEars
Eu estava tendo dificuldades com o cd-completion até fazer essas configurações. Obrigado.
Ismail