缩写常用的多个git命令选项

时间:2016-08-06 16:41:53

标签: git shell zsh

我有时会使用带有git diff选项的--color-words='\w+|.'来获取内嵌和整个单词的更改。

由于我注意到我稍微使用了它,因此我为diff --color-words='\w+|.'制作了一个git别名。

但现在我注意到,还有很多其他地方我想使用相同的选项,例如git showgit stash show -pgit 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

有没有办法为一个艰难的选项创建别名,所以我可以使用它与各种命令,并节省打字和思考?

3 个答案:

答案 0 :(得分:1)

  

有没有办法为艰巨的选项创建别名?

没有别名,没有。

您仍然可以使用别名来定义您自己的diff / show / log命令。 (例如diffwshowwlogw

或者您可以考虑编写一个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
}

但是模式替换完成了同样的事情,代码更少。