我已将vim设置为外部差异工具:
[diff]
external = git_diff_wrapper
#!/bin/sh
vimdiff "$2" "$5"
假设我有300个已修改过的文件;通过bash,我输入“git diff”。它按顺序启动了300个vimdiff,我该如何中止它?
答案 0 :(得分:18)
使用:cquit退出vim并显示错误代码。 Git将检测错误并停止打开新的vimdiff。你可能想在.vimrc中为它创建一个映射:
if &diff
map Q :cquit<CR>
endif
然后点击Q从早期git diff运行中止。
为了使其正常工作,您必须编辑gitconfig:
git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
答案 1 :(得分:4)
如果停止进程是不够的,那么杀死shell本身(你在其中启动git diff
)可能会更有效。
还没准备好全速使用
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 “$@”
fi
但是如果您仍然需要修改后的git diff
,git status
可能会在启动之前提供帮助;)
如果需要,您可以设置一个函数来获取旧的git diff
行为:
我仍然可以使用
--no-ext-diff
标志访问默认的git diff行为。这是我在bash配置文件中添加的函数:
function git_diff() {
git diff --no-ext-diff -w "$@" | vim -R -
}
--no-ext-diff
:防止使用vimdiff-w
:忽略空白-R
:以只读模式启动vim-
:让vim充当寻呼机
答案 2 :(得分:2)
刚刚杀死父进程。打开终端,使用pstree -p
查找git
进程的进程ID(PID),然后查找kill -9
进程。在我的系统上,它看起来像这样:
$ pstree -p
...
├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331
不完全优雅,但它有效。在您的系统上,pager
可能会有所不同,但它会以git
作为父进程。