2010-05-07 81 views
14

我有VIM设置为我的外部比较工具:如何取消外部git diff?

[diff] 
     external = git_diff_wrapper 

#!/bin/sh 

vimdiff "$2" "$5" 

说我有已修改300个文件;通过bash,我输入“git diff”。它连续发射300个vimdiffs,如何中止它?

+0

这是一个奇妙的问题有:) – vfclists 2017-08-21 14:04:33

回答

4

如果停止进程是不够的,杀死shell本身(在其中启动git diff)可能会更有效。

http://trick.vanstaveren.us/wp/wp-uploads/2009/06/close-this-window.png


参见Git Diff with Vimdiff

VimDiff

没有准备好去全速进入使用vimdiff(我只是新手的话),我把下面的在'gitvimdiff'中。
结果是,我可以使用vimdiff通过运行'gitvimdiff'来查看git-diff,但正常调用'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 “[email protected]” 
fi 

但是,如果你仍然想修改git diff,一个git status可能推出之前帮助;)

而且,您可以设置是否需要一个函数来获取旧git diff行为:

我仍然可以通过--no-ext-diff标志访问默认的git diff行为。这里有一个功能,我把我的bash配置文件:

function git_diff() { 
    git diff --no-ext-diff -w "[email protected]" | vim -R - 
} 
  • --no-ext-diff:防止使用vimdiff同时
  • -w:忽略空白
  • -R:在只读启动Vim模式
  • -:使vim充当寻呼机
+0

的gitvimdiff别名是一个不错的主意。 – v2k 2010-05-11 06:14:13

+1

噢,如果我没有先阅读这篇文章,我几乎会经历数百万个'ctrl + q'。万分感谢!! – shriek 2015-02-20 03:28:26

2

只要杀死父进程即可。打开一个终端,使用pstree -p来查找git进程的进程ID(PID),然后使用kill -9它。在我的系统上,它看起来像这样:

$ pstree -p 
... 
     ├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332) 
... 
$ kill -9 10331 

不完全优雅,但它的工作原理。在您的系统上,pager可能会有所不同,但它会有git作为父级进程。

17

使用:cquit退出vim并显示错误代码。 Git会检测错误并停止打开新的vimdiffs。你可能想要在你的.vimrc中为它创建一个映射:

if &diff 
    map Q :cquit<CR> 
endif 

然后只要点击Q就可以早点退出git diff运行。

为了这个工作,你必须编辑gitconfig:

git config --global difftool.trustExitCode true 
git config --global mergetool.trustExitCode true 
+2

这应该是被接受的答案,因为它直接解决问题而不是提供解决方法。 “if&diff”映射也非常棒。感谢所有! – pabo 2014-12-12 19:04:16

+1

它不适合我,如何配置? – songhir 2015-08-15 02:26:32

+0

这不适合我。我不是指映射,而是指:cquit命令本身。 Vim正常退出,但Git仍然继续进行差异化处理。 – kai 2015-09-18 14:42:52