我有时会使用带有git diff
选项的--color-words='\w+|.'
来获取内嵌和整个单词的更改。
由于我注意到我稍微使用了它,因此我为diff --color-words='\w+|.'
制作了一个git别名。
但现在我注意到,还有很多其他地方我想使用相同的选项,例如git show
,git stash show -p
,git log -p
等等。因此,无法预测未来我可能需要该选项的位置。
我试过这个:
$ git config --global alias.words "--color-words='\w+|.'"
$ git diff words
fatal: ambiguous argument 'words': unknown revision or path not in the working tree
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
而且:
$ git config --global alias.--words "--color-words='\w+|.'"
error: invalid key: alias.--words
有没有办法为一个艰难的选项创建别名,所以我可以使用它与各种命令,并节省打字和思考?
答案 0 :(得分:1)
有没有办法为艰巨的选项创建别名?
没有别名,没有。
您仍然可以使用别名来定义您自己的diff / show / log命令。 (例如diffw
,showw
,logw
或者您可以考虑编写一个shell脚本(在bash中,甚至在Windows上,因为它由Git for Windows msys2解释),如git-diffw
(没有扩展名,设置在PATH中的任何位置)
任何名为git-xxx
的脚本都会使用xxx
作为Git命令:git xxx
。
这意味着您处于脚本世界中,您可以利用常用选项(例如在文件或环境变量中设置)
答案 1 :(得分:1)
可以使用函数:
PROMPT_COMMAND
覆盖git命令,如果找不到参数“words”,则使用路径中的函数定期调用它。如果是,则从参数中删除它,使用其他参数调用命令,并使用--colour-words的额外参数代替“words”
答案 2 :(得分:1)
受Nick Bull的回答启发,我已将此功能添加到.zshrc
:
GIT=`which git`
git() {
$GIT ${@/--words/'--color-words=\w+|.'}
}
执行任何git
命令,--words
选项替换为'--color-words=\w+|.'
。
有关详细信息,请参阅用户的Z-Shell指南的Pattern replacement section。
请注意,在bash
中,您需要其他引号:"${@/--words/'--color-words=\w+|.'}"
。
现在唯一缺少的是--words
--wor<TAB>
可能的标签已完成,因此它不会被--word-diff
取代(导致需要)退格和重写)。
为了完整起见,我最初将Nick Bull的答案重写为:
git() {
arguments=()
for i in "$@"; do
if [[ $i == --words ]]; then
arguments+=('--color-words=\w+|.')
else
arguments+=($i)
fi
done
/usr/bin/git $arguments
}
但是模式替换完成了同样的事情,代码更少。