Voglio il completamento fuzzy senza distinzione tra maiuscole e minuscole per file e directory in zsh. Dopo aver letto il manuale per alcune ore, ecco cosa mi è venuto in mente:
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\_}'
Inoltre, voglio premere TABuna volta per visualizzare i possibili completamenti, modificando solo ciò che ho digitato se esiste esattamente un completamento. Quindi premere TABuna seconda volta per mettermi in modalità "completamento menu". Sulla base dei manuali, ho pensato a questo:
zstyle ':completion:*' menu select
Ora tutto funziona come dovrebbe tranne in una circostanza. Ho due cartelleDesktop e .rstudio-desktopnella mia directory home. Dal momento che ho setopt globdots, mi aspetto di digitare quanto segue:
$ cd ~/dktop<TAB>
per lasciare il mio comando come inserito, e visualizzare come candidati di completamento Desktope .rstudio-desktop. Invece rimuove dktop , lasciandomi con il seguente:
$ cd ~/
Ho esaminato tutti i manuali, le guide, le domande sullo scambio di stack pertinenti e varie altre fonti. Ma qualunque cosa faccia, non riesco a farlo funzionare.
È interessante notare, tuttavia, se lo sono nella home directory e digito quanto segue, quindi tutto funziona come previsto:
$ cd dktop<TAB>
Cioè, è solo un problema con segmenti di percorsi non iniziali (e puoi vedere con C-x h che questo corrisponde al directoriestag anziché al local-directoriestag in uso).
Per una facile riproducibilità, ecco un esempio ~/.zshrcche riprodurrà la situazione e il comportamento sopra descritti (testati su una nuova macchina virtuale El Capitan con zshda Homebrew).
zsh 5.3.1su OS X il problema si riproduce. È interessante che ci sia una differenza tra i sistemi operativi.
zsh 5.3.1suArch Linux.cd ~/dktop<tab>resecd ~/Desktop.