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 TAB
una volta per visualizzare i possibili completamenti, modificando solo ciò che ho digitato se esiste esattamente un completamento. Quindi premere TAB
una 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-desktop
nella 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 Desktop
e .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 directories
tag anziché al local-directories
tag in uso).
Per una facile riproducibilità, ecco un esempio ~/.zshrc
che riprodurrà la situazione e il comportamento sopra descritti (testati su una nuova macchina virtuale El Capitan con zsh
da Homebrew).
zsh 5.3.1
su OS X il problema si riproduce. È interessante che ci sia una differenza tra i sistemi operativi.
zsh 5.3.1
suArch Linux
.cd ~/dktop<tab>
resecd ~/Desktop
.