题
我将VIM设置为我的外部差异工具:
[diff]
external = git_diff_wrapper
#!/bin/sh
vimdiff "$2" "$5"
说我有300个已修改的文件;通过bash,我键入“ git diff”。它依次启动300个Vimdiffs,如何中止它?
解决方案
如果停止该过程还不够,请杀死外壳本身(您在其中启动 git diff
)可能更有效。
也可以看看 vimdiff的git差异
没有准备好全速使用
vimdiff
(我只是新手),我将以下内容列入gitvimdiff
’.
结果是我可以使用vimdiff
通过跑步看git-diff'gitvimdiff
',但是正常的调用'git diff
'行为与我曾经一样。
#!/bin/sh
if [ -n "${GIT_EXTERNAL_DIFF}" ]; then
[ "${GIT_EXTERNAL_DIFF}" = "${0}" ] ||
{ echo “GIT_EXTERNAL_DIFF set to unexpected value” 1>&2; exit 1; }
exec vimdiff “$2″ “$5″
else
GIT_EXTERNAL_DIFF=”${0}” exec git –no-pager diff “$@”
fi
但是,如果您仍然想要修改 git diff
, , 一种 git status
推出之前可能会有所帮助;)
您可以设置一个函数以获取旧 git diff
如果需要的话,
我仍然可以使用默认的git差异行为
--no-ext-diff
旗帜。这是我在bash配置文件中添加的功能:
function git_diff() {
git diff --no-ext-diff -w "$@" | vim -R -
}
--no-ext-diff
: :防止使用Vimdiff-w
: :忽略空格-R
: :要以仅阅读模式启动vim-
: :使VIM充当打印机
其他提示
使用:用错误代码退出VIM。 GIT将检测到错误,并停止打开新的Vimdiffs。您可能想在.vimrc中为其创建一个映射:
if &diff
map Q :cquit<CR>
endif
然后只需从git差异跑步即可到达Q。
为了这样做,您必须编辑gitconfig:
git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
只需杀死父过程即可。打开终端,使用 pstree -p
查找过程ID(PID) git
然后 kill -9
它。在我的系统上,看起来像这样:
$ pstree -p
...
├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331
并非完全优雅,但它起作用。在您的系统上 pager
可能会有所不同,但它会有 git
作为父过程。
不隶属于 StackOverflow