personalizar change cambiar zsh tab-completion programmable-completion

change - zsh: usar terminaciones para el comando X cuando escribo el comando Y



zsh install linux (1)

En zsh, tengo una función llamada g que actúa así:

  • Sin argumentos, llamar al git status
  • con uno o más argumentos, delegue a git con todos los argumentos dados, es decir, llame a git $@

Me gustaría que las terminaciones de la pestaña para g sean exactamente las mismas que para git . Puedo lograr esto con el alias g=git , pero eso no me permite llamar al status por defecto (el primer punto arriba).

¿Cómo puedo delegar a la finalización de git ?

En bash, simplemente complete -F _git g que reutiliza la función de finalización de git. Con zsh, la finalización de git parece mucho más compleja, y no pude encontrar una solución similar.

Supongo que hay una función en zsh para decir "pretender que escribí el comando [x], ¿para qué lo completarías?". Si supiera qué es eso, debería ser lo suficientemente simple como para usar una función para delegarlo. Pero no he encontrado tal función en los manuales.


La documentación para compdef dice esto:

La función compdef se puede usar para asociar funciones de finalización existentes con nuevos comandos. Por ejemplo,

compdef _pids foo

Pero adaptarlo ( _git es la función de finalización habitual para git ) no produjo un resultado funcional para mí (incluso después de que _git hubiera _git automáticamente):

compdef _git g

Aunque pude hacerlo funcionar a través de _dispatch :

compdef ''_dispatch git git'' g