19

我已经将 vim 设置为我的外部差异工具:

[diff]
        external = git_diff_wrapper

#!/bin/sh

vimdiff "$2" "$5"

假设我有 300 个文件已被修改;通过 bash,我输入“git diff”。它依次启动 300 个 vimdiff,我该如何中止它?

4

3 回答 3

24

使用 :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
于 2013-03-11T21:54:58.847 回答
3

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

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


另见Git Diff 与 Vimdiff

VimDiff

还没有准备好全速使用vimdiff(我只是新手),我将以下内容放在'<code>gitvimdiff'中。
结果是我可以vimdiff通过运行 '<code>gitvimdiff' 来查看 git-diff,但正常调用 '<code>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,agit 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 充当寻呼机
于 2010-05-07T06:29:32.277 回答
2

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

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

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

于 2010-05-07T06:30:08.983 回答