Aggiorna dinamicamente l'elenco di completamento in zsh


13

Trovo che gli elenchi dei risultati di zsh per il Tabcompletamento siano abbastanza utili, tuttavia mi piacerebbe modificare un po 'il loro comportamento:

Dovrebbero apparire quando I Tabper la prima volta e successivamente aggiornare dinamicamente con ogni nuova lettera aggiunta. Il comportamento predefinito è che i suggerimenti vengono rivalutati solo quando si Tabdesidera salvare questo tasto ripetuto. ( Aggiornamento: ma elenca solo i possibili completamenti, non dovrebbe modificare automaticamente la mia riga di prompt effettiva anche se è rimasta solo un'opzione.)

Esiste un modo per raggiungere tale comportamento?


Puoi approfondire la personalizzazione zshdel comportamento. Cosa dovrebbe succedere esattamente? Al momento questa domanda è come se tu volessi che le scelte fossero elencate per ogni pressione del tasto dopo il TAB iniziale, ma che in realtà non completerà nulla. Ogni tasto premuto dovrebbe comportarsi come se fosse seguito da un TAB? Tieni presente che ciò significherebbe un po 'di backspacing per completamenti non intenzionali.
p

@ user112553 La prima opzione: in tal senso, in realtà non dovrebbe comportarsi come una TAB ripetuta. Voglio solo che l'elenco dei suggerimenti si adegui in modo dinamico.
F30

Risposte:


2

Un modo che potrebbe offrire la soluzione che desideri è incremental-complete-word:

zle -N incremental-complete-word
bindkey '^Xi' incremental-complete-word

Questo carica la funzione e la lega a Ctrl- X i. Ora puoi provarlo:

> k^Xi
incremental (complete): -no prefix-

In questo esempio è kstata digitata la lettera , seguita da Control-X i.

> kil
incremental (complete): kill       

Ho digitato ile ora c'era un possibile completamento ( kill). Uno potrebbe accettarlo e premere invio.

> kill^D
incremental (complete): -no prefix-
- external command -
kill      killall   killall5

Digitando Ctrl: Dzsh mostra i possibili completamenti.

Da zshcontrib(1):

incremental-complete-word
Ciò consente il completamento incrementale di una parola. Dopo aver avviato questo comando, è possibile visualizzare un elenco di opzioni di completamento dopo ogni carattere digitato, che è possibile eliminare con ^Ho DEL. Premendo Invio si accetta il completamento finora e si ritorna alla normale modifica (ovvero, la riga di comando non viene immediatamente eseguita). Puoi premere TABper completare normalmente, ^G per tornare allo stato quando hai iniziato e ^Dper elencare le partite.

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.