2010-02-01 12 views
32

Supponiamo che io sono:alias zsh -> funzione?

alias gg="git grep" 

poi cose del genere:

gg "int x" 

opere, ma

gg int x 

ottiene reclami. C'è un modo per riscrivere gg come una funzione in zsh in modo che tenga tutti gli argomenti dopo gg e li infili in una stringa?

Grazie!

risposta

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

Uhm, per farli andare in una stringa, è necessario "" $ * "' invece di '" $ @ "' - il modulo che hai scritto li avrebbe passati come parametri separati, proprio come l'alias. –

+1

Grazie per la correzione. –

+0

Questo ha il vantaggio di essere anche compatibile con bash – Jian

4

per il vostro particolare caso d'uso, questa è una cattiva idea. git-grep si aspetta un modello a singolo argo. Stai cercando di ottenere che la shell tratti il ​​tuo spazio (tra int e x) come parte del pattern. Questo si interromperà rapidamente quando proverai qualcosa come: gg foo.*bar o varie altre cose che la shell potrebbe interpretare. Quindi qualsiasi cosa dopo gg dovrebbe essere citata. Questo è il motivo per cui git grep int x anche non funziona: fatal: ambiguous argument 'x': unknown revision or path not in the working tree...

Se si pensa gg è un risparmio di battitura vale la pena, si dovrebbe tenere il vostro arg ad esso coerente con quello che si aspetta git-grep. Il tuo alias originale va bene per questo. E continua a virgolette singole o doppie il tuo pattern, proprio come fai con qualsiasi altro comando che accetta regex.

+0

Non una risposta ma un ottimo punto. – shadowtalker