Finalización arbitraria de zsh mediante una combinación de teclas

Finalización arbitraria de zsh mediante una combinación de teclas

A veces, un comando no tiene una finalización instalada, o sintácticamente podría aceptar una gran cantidad de tipos de argumentos, lo que hace que la finalización sea casi inútil. Por ejemplo, "git checkout" puede tomar el nombre de cualquier archivo rastreado por gitoel nombre de cualquier árbitro u otro árbol. También puede aceptar algunas banderas de opciones. Son muchas posibles terminaciones.

Sabiendo que quiero completar, digamos, el nombre de una rama, ¿hay alguna manera de vincular una clave para completar o mostrar un menú de nombres de ramas? (Y lo mismo ocurre con cualquier categoría de finalización).

Eso parece posible y útil, pero no lo he visto hecho.

Respuesta1

Si, esto se puede hacer. Originalmente obtuve lo siguiente de una de las listas de correo de zsh, pero no recuerdo quién lo publicó:

zle -C complete-file complete-word _generic
zstyle ':completion:complete-file::::' completer _files
bindkey '^x^f' complete-file

Esto podría adaptarse fácilmente para utilizar una función de finalización diferente en lugar de _files.

La primera línea define un nuevo widget de finalización llamado complete-fileque se comporta como el widget incorporado complete-wordy utiliza la _genericfunción para generar la lista de finalizaciones.

Luego, la segunda línea lo configura para que cuando se use ese widget personalizado, el completador solo lo use _filespara obtener la lista de finalizaciones.

Luego, la tercera línea vincula el nuevo widget a una secuencia de teclas.

información relacionada