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-file
que se comporta como el widget incorporado complete-word
y utiliza la _generic
funció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 _files
para obtener la lista de finalizaciones.
Luego, la tercera línea vincula el nuevo widget a una secuencia de teclas.