Actualizar dinámicamente la lista de finalización en zsh

13

Encuentro las listas de resultados de zsh para Tab completar son bastante útiles, sin embargo, me gustaría modificar un poco su comportamiento:

Deberían aparecer cuando Tabpor primera vez y luego actualizar dinámicamente con cada nueva letra agregada. El comportamiento predeterminado es que las sugerencias solo se vuelven a evaluar cuando Tabnuevamente, quiero guardar esta repetida pulsación de tecla. ( Actualización: pero solo enumere las posibles finalizaciones, no debería modificar automáticamente mi línea de solicitud real incluso si solo queda una opción).

¿Hay alguna forma de lograr tal comportamiento?

F30
fuente
Puede profundizar en zshel comportamiento de la personalización. ¿Qué debería suceder exactamente? Por el momento, esta pregunta se lee como si quisiera que se enumeren las opciones para cada pulsación de tecla después de la TAB inicial, pero eso en realidad no completará nada. ¿Debería comportarse cada pulsación de tecla como si fuera seguida de una TAB? Tenga en cuenta que esto significaría un poco de retroceso para las terminaciones no deseadas.
peth
@ user112553 La primera opción: en ese sentido, en realidad no debería comportarse como una TAB repetida. Solo quiero que la lista de sugerencias se ajuste dinámicamente.
F30

Respuestas:

2

Una forma de ofrecer la solución que desea es incremental-complete-word:

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

Esto carga la función y la une a Ctrl- X i. Ahora puedes probarlo:

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

En este ejemplo, kse escribió la letra , seguida de Control-X i.

> kil
incremental (complete): kill       

Escribí ily ahora había una posible finalización ( kill). Uno podría aceptar eso y presionar enter.

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

Escribiendo Ctrl , Del zsh muestra posibles finalizaciones.

De zshcontrib(1):

incremental-complete-word
Esto permite completar gradualmente una palabra. Después de iniciar este comando, se puede mostrar una lista de opciones de finalización después de cada carácter que escriba, que puede eliminar con ^Ho DEL. Al presionar Retorno, se acepta la finalización hasta el momento y vuelve a la edición normal (es decir, la línea de comando no se ejecuta de inmediato). Puedes golpearTAB para realizar la finalización normal, ^G para volver al estado en que comenzó y ^Dpara enumerar las coincidencias.

qbi
fuente