Búsqueda de finalización de argumentos tipo pez en ZSH

8

Estaba jugando con los peces y noté este práctico comportamiento

Si escribí wget -<tab><tab><tab>, me pusieron en un menú interactivo. Sin embargo, cuando escribí, busqué las descripciones de los propios argumentos. Intenté esto en zsh, y escribir en este menú solo me devolvió a mi mensaje interactivo. ¿Hay alguna manera de lograr una funcionalidad similar en zsh?

ollien
fuente
He querido saber cómo hacer esto durante mucho tiempo. Cuando se trata de completar palabras clave estándar (no opciones), vim lo hace al permitirle configurar la finalización para mantener el foco en el búfer de línea, de esa manera, si la lista de finalización es demasiado larga, simplemente continúe escribiendo y la lista se filtra naturalmente. Pero zsh cambia inmediatamente el foco al widget de selección de menú
the_velour_fog
No entiendo el comportamiento que estás describiendo. ¿Se trata de buscar las descripciones de las opciones en lugar de los nombres de las opciones? ¿O se trata de la forma de navegar por las opciones? ¿A qué menú se refiere (zsh tiene muchas configuraciones diferentes para completar)?
Gilles 'SO- deja de ser malvado'
@Gilles Sí, puedes usarlo para buscar las descripciones de las opciones, o incluso los nombres de las opciones. El menú al que me refiero aparece cuando escribe un comando, un guión, luego presiona tab dos veces. Por ejemplo, escribir ls -<tab><tab>me introduce en un menú donde puedo desplazarme hacia arriba y hacia abajo por las diferentes opciones. En pescado, puedo escribir, que luego buscará estas opciones y sus descripciones. Espero lograr una funcionalidad similar en zsh.
ollien
Todavía no estoy seguro de lo que quieres decir exactamente. ¿Es la interactividad que quieres? es decir, ¿puede seleccionar de la lista con flechas y opciones de resaltado? Usted dice In fish, I'm able to type, which will then search these options and their descriptions.que puede "buscar estas opciones y sus descripciones" en zsh. Por ejemplo, ls --h<tab>busca las opciones que comienzan con --hy enumera cuatro coincidencias.
Sparhawk
Echa un vistazo a esta captura de pantalla . Si ls -size<tab>escribo, obtengo ls --block-size y ls --size como opciones en zsh. Sin embargo, fish me recomienda --size, --tabsize, -k, -S, --block-size y --human-legible. Esperaba lograr una funcionalidad similar en zsh. No solo busca los nombres de los comandos, sino que también busca las descripciones
ollien

Respuestas:

1

Creo que esto hace lo que quieres:

  zmodload zsh/complist
  setopt menucomplete
  zstyle ':completion:*' menu select=0 search

Esto hará que la lista se muestre cuando presione la pestaña, y luego, si continúa escribiendo, buscará las opciones disponibles, incluidas las descripciones, con una búsqueda incremental.

También puede estar interesado en la misma configuración, pero con interactiva en lugar de búsqueda. En ese caso, a medida que escribe, filtrará las terminaciones hasta las que coincidan con lo que ha escrito hasta ahora.

Thayne
fuente
Hmm ... si escribo wget -<tab>noesto no filtra la lista de finalización. Esto continúa escribiendo 'no' en el terminal después --accept-regex=, que es la primera opción en la lista de finalización.
ollien
1
eh, eso no es lo que me pasa. Pero en realidad no funciona con la opción de búsqueda, solo hace una búsqueda incremental a través de las posibilidades
Thayne
1

Intenta poner esto en tu .zshrcarchivo:

 # load module for list-style selection
 zmodload zsh/complist

 # use the module above for autocomplete selection
 zstyle ':completion:*' menu yes select

 # now we can define keybindings for complist module
 # you want to trigger search on autocomplete items
 # so we'll bind some key to trigger history-incremental-search-forward function
 bindkey -M menuselect '?' history-incremental-search-forward

Ahora si escribe wget -<tab>menú con autocompletados aparece. Definimos la combinación de teclas para este menú, por lo que si presiona la ?línea de búsqueda aparece en la parte superior de las terminaciones:

davidsykora~%wget --referer
isearch: refe

Algunos consejos adicionales:

  • También puede definir bindkey -M menuselect '/' history-incremental-search-backwardpara búsqueda hacia atrás
  • Si presiona ?nuevamente durante una búsqueda, la selección saltará al siguiente resultado de búsqueda. Use /para saltar al resultado anterior
  • se necesitan muchos ajustes para que funcione como lo desea, así que eche un vistazo a la complist documentación para encontrar funciones y opciones adicionales
  • para mí, por lo general, es mucho más rápido usar la vi-insertfunción complist: filtra las terminaciones en función de lo que escribe.
David Sýkora
fuente