O ZSH é deliciosamente livre do comportamento de divisão de palavras visto em outros shells (a menos que por alguma razão bizarra a opção SH_WORD_SPLIT
tenha sido ativada), então não há necessidade de usar construções estranhas de aspas duplas.
% (){ print -l $* } a b c
a
b
c
% (){ print -l "$*" } a b c
a b c
% (){ local msg; msg="$*"; print -l $msg } a b c
a b c
%
Assim, o seguinte deve ser suficiente:
function gcm {
local msg
msg="$*"
git commit -m $msg
}
A globalização pode ser desativada citando strings como [WIP]
as '[WIP]'
ou talvez por meio de% al_de% alias:
% function blah { print -l "$*" }
% alias blah='noglob blah'
% blah [de] *blah*
[de] *blah*
%