Conclusões da guia Zsh não funcionam como desejado para caminhos parciais

17

Eu quero conclusão difusa que não diferencia maiúsculas de minúsculas para arquivos e diretórios zsh. Depois de ler o manual por algumas horas, é isso que eu criei:

zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'

Além disso, quero pressionar TABuma vez para exibir possíveis conclusões, modificando apenas o que eu digitei se houver exatamente uma conclusão. Pressionar TABuma segunda vez deve me colocar no modo "conclusão do menu". Com base nos manuais, eu vim com isso:

zstyle ':completion:*' menu select

Agora tudo funciona como deveria, exceto em uma circunstância. Eu tenho duas pastas Desktope .rstudio-desktopno meu diretório pessoal. Desde que eu tenho setopt globdots, espero digitar o seguinte:

$ cd ~/dktop<TAB>

para deixar meu comando como digitado e exibir como candidatos à conclusão Desktope .rstudio-desktop. Em vez disso, remove dktop , deixando-me o seguinte:

$ cd ~/

Analisei todos os manuais, guias, perguntas sobre o Stack Exchange relevantes e várias outras fontes. Mas o que quer que eu faça, não posso fazer isso funcionar.

Curiosamente, se eu estiver no diretório inicial e digite o seguinte, tudo funcionará conforme o esperado:

$ cd dktop<TAB>

Ou seja, é apenas um problema com segmentos de caminhos não principais (e você pode ver com C-x hisso isso corresponde à directoriesmarca e não à local-directoriesmarca que está sendo usada).

Para facilitar a reprodutibilidade, aqui está um ~/.zshrcque reproduzirá a situação e o comportamento descritos acima (testados em uma nova máquina virtual El Capitan zshda Homebrew).

Radon Rosborough
fonte
Não é possível reproduzir. zsh 5.3.1em diante Arch Linux. cd ~/dktop<tab>rendimentos cd ~/Desktop.
precisa saber é o seguinte
@ PythonNut No zsh 5.3.1OS X, o problema é reproduzido. É interessante que exista uma diferença entre os sistemas operacionais.
Radon Rosborough
1
@PythonNut Na verdade, aposto que isso ocorre porque o Linux diferencia maiúsculas de minúsculas e o macOS não diferencia maiúsculas de minúsculas.
Radon Rosborough
Assim como um lembrete amigável, nem todos os Macs / macOS diferenciam maiúsculas de minúsculas, depende de o disco ser formatado sem maiúsculas ou minúsculas.
Konqui

Respostas:

1

Uma solução possível é:

bindkey "^I" expand-word

Isso fará com que a guia se expanda ~/para o caminho absoluto.

ConstipatedNinja
fonte
Talvez esteja faltando alguma coisa, mas não vejo como isso se relaciona com as conclusões de guias confusas ou com a solução do problema descrito acima. Se eu fizer o que você sugere, pressionar TAB será exibido cd /Users/raxod502/dktope a conclusão será desativada.
Radon Rosborough
@RadonRosborough A esperança era que, expandindo ~/para seu caminho absoluto, a conclusão nebulosa começasse a funcionar. Parecia um daqueles casos em que o problema é que ele é avaliado uma vez, mas você realmente precisa avaliar duas vezes para funcionar, portanto, ter o caminho absoluto em vez de ~/significaria que voltaria a precisar apenas de uma avaliação. Mas, desculpe, esqueci que o bindkey substitui os bindings antigos e não consigo encontrar nada que diga se é possível vincular duas funções a um keykey. Sem a minha chave de ligação, sua conclusão funciona conforme o esperado quando são fornecidos caminhos absolutos?
ConstipatedNinja
Não. Não faz diferença se o caminho de entrada é ~/dktopou /Users/raxod502/dktop; o resultado é o mesmo, ou seja, dktopé excluído quando pressiono TAB.
Radon Rosborough