我想在 my 中创建一些函数/别名.zshrc
来帮助 git,但我不知道如何做。
第一:
完整命令:git commit -s -m "My message"
我想要的最终结果:gsc -m "My message"
第二个:
完整命令:git commit -s -a -m "My message"
我想要的最终结果:gsca "My message"
正如你所看到的,我想要一个宏,它可以调用带有部分参数的东西,并接受所有其他参数,无论它们来自这个宏调用。
我尝试过的:
function gsc() { git commit -s $@; }
alias gsc='git commit -s'
这些都不起作用。
我的测试:
> gsc -a -m "test"
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
smth.txt
nothing added to commit but untracked files present (use "git add" to track
答案1
这里:
function gsc() { git commit -s $@; }
使用未引用的 $@
意味着该函数的任何参数都将经过分词,例如调用gsc -m "hello there"
最终将git
使用参数commit
, -s
, -m
, hello
, 和进行调用there
,即使用应该将提交消息拆分为不同参数的内容,就像您运行了一样git commit -s m hello there
在 shell 命令行上。
您需要将扩展引用为"$@"
。另外,function foo
它是一个 ksh-ism,它与标准 等效foo()
。所以:
gsc() { git commit -s "$@"; }
另一方面,别名
alias gsc='git commit -s'
看起来应该可以。别名仅在解析命令行之前替换其内容,因此gsc -m "hello there"
应该完全等同于git commit -s -m "hello there"
.
尽管您可能想确保在测试时没有同时定义别名和函数。这肯定会引起混乱。
答案2
您的解决方案是正确的,并且测试表明它按预期工作。通过在短命令旁边键入完整命令并验证是否获得相同的结果,您应该会看到它确实按预期工作。换句话说,在运行gsc -a -m "test"
并看到“没有添加任何内容到提交”之后,运行git commit -s -a -m "test"
并验证它的行为是否相同。
我建议使用别名而不是函数。首先,它将允许自动补全工作。其次,您将避免常见的错误,例如缺少双引号$@
- 函数中存在的错误gsc
。