I completamenti della scheda Zsh non funzionano come desiderato per i percorsi parziali


17

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).


Impossibile riprodurre. zsh 5.3.1su Arch Linux. cd ~/dktop<tab>rese cd ~/Desktop.
PythonNut,

@PythonNut Con zsh 5.3.1su OS X il problema si riproduce. È interessante che ci sia una differenza tra i sistemi operativi.
Radon Rosborough,

1
@PythonNut In realtà, scommetto che questo è perché Linux fa distinzione tra maiuscole e minuscole e macOS non distingue tra maiuscole e minuscole.
Radon Rosborough,

Proprio come un promemoria amichevole, non tutti i Mac / macOS non fanno distinzione tra maiuscole e minuscole, dipende dal fatto che il disco sia formattato senza distinzione tra maiuscole e minuscole.
konqui,

Risposte:


1

Una possibile soluzione è fare:

bindkey "^I" expand-word

Ciò farà espandere la scheda al ~/percorso assoluto.


Forse mi manca qualcosa, ma non vedo come ciò si collega in alcun modo ai completamenti delle schede fuzzy o alla risoluzione del problema descritto sopra. Se faccio come suggerisci, quindi premere TAB mi darà cd /Users/raxod502/dktope il completamento è disabilitato.
Radon Rosborough,

@RadonRosborough La speranza era che, espandendosi ~/sul suo percorso assoluto, il completamento fuzzy avrebbe iniziato a funzionare. Sembrava uno di quei casi in cui il problema è che lo valuta una volta, ma in realtà ne hai bisogno per valutarlo due volte per funzionare, quindi avere il percorso assoluto invece ~/significherebbe che tornerebbe a necessitare solo di una valutazione. Ma merda, mi dispiace, ho dimenticato che bindkey sostituisce i vecchi bind e non riesco a trovare nulla che dica se è anche possibile associare due funzioni a un tasto. Senza il mio bindkey, il tuo completamento funziona come previsto quando ti vengono dati percorsi assoluti?
StipspatedNinja,

No. Non fa alcuna differenza se il percorso di input è ~/dktopo /Users/raxod502/dktop; il risultato è lo stesso, ovvero dktopviene eliminato quando premo TAB.
Radon Rosborough,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.