2010-02-01 15 views
32

Supongamos que tengo:zsh alias -> función?

alias gg="git grep" 

entonces cosas como:

gg "int x" 

obras, sino

gg int x 

recibe quejas. ¿Hay alguna forma de volver a escribir gg como una función en zsh para que tome todos los argumentos después de gg y los meta en una cadena?

Gracias!

Respuesta

58
gg() { git grep "$*"; } 
+6

Uhm, para que entren en una cadena, necesita '" $ * "' en lugar de '" $ @ "' - el formulario que escribió los pasará como params separados, al igual que el alias. –

+1

Gracias por la corrección. –

+0

Esto tiene el beneficio de ser también compatible con bash – Jian

4

Para su caso de uso particular, esta es una mala idea. git-grep está esperando un patrón de una sola arg. Está intentando que el shell trate su espacio (entre int y x) como parte del patrón. Esto se romperá rápidamente cuando intentes algo como: gg foo.*bar o varias otras cosas que el intérprete de comandos podría interpretar. Entonces cualquier cosa después de gg realmente debería ser citada. Esta es la razón por git grep int x también no funciona: fatal: ambiguous argument 'x': unknown revision or path not in the working tree...

Si cree gg es un protector de pulsaciones de teclas que vale la pena, usted debe mantener su arg siempre que sean compatibles con lo que git-grep Espera. Tu alias original está bien para esto. Y continúe citando una o dos veces su patrón, al igual que lo hace con cualquier otro comando de aceptación de expresiones regulares.

+0

No es una respuesta, pero es un muy buen punto. – shadowtalker