2010-11-19 6 views
17

En zsh, tengo una función llamada g que actúa de esta manera:zsh: terminaciones de uso de los comandos X cuando Tipo de comando Y

  • sin argumentos, llame git status
  • con uno o más argumentos, delegar en gIT con todos los argumentos dados - es decir llaman git [email protected]

me gustaría que la pestaña terminaciones de g ser exactamente el mismo que para git. Puedo lograr esto con alias g=git, pero eso no me permite llamar al status de manera predeterminada (el primer punto anterior).

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

En bash, simplemente hice 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 puedo encontrar una solución similar.

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

+0

¡Gracias por el consejo sobre cómo hacer que funcione en bash! –

Respuesta

17

La documentación para compdef dice esto:

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

compdef _pids foo 

Pero adaptándolo (_git es la función de finalización habitual para git) no ha dado ningún resultado de trabajo para mí (incluso después de _git habían sido autocargado):

compdef _git g 

Pude hacerlo funcionar a través de _dispatch aunque:

compdef '_dispatch git git' g 
+1

Eso es raro. Tengo lo mismo que sucede, pero otras funciones de finalización funcionan bien con el primer comando. –

+1

excelente, muchas gracias! En cuanto a por qué el primero no funciona, ¿tal vez la finalización de _git es lo suficientemente personalizada como para redirigirla no es suficiente para que responda con algo útil? (es decir, tal vez comprueba que el comando comience con "git") – gfxmonk

+2

¿Alguna idea de cómo 'compdef '_dispatch git git' g' se puede ajustar para hacer que g se complete automáticamente como git-status, en lugar de simplemente git? –

Cuestiones relacionadas