我已经将 vim 设置为我的外部差异工具:
[diff]
external = git_diff_wrapper
#!/bin/sh
vimdiff "$2" "$5"
假设我有 300 个文件已被修改;通过 bash,我输入“git diff”。它依次启动 300 个 vimdiff,我该如何中止它?
使用 :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
如果停止进程还不够,杀死 shell 本身(在其中启动git diff
)可能更有效。
还没有准备好全速使用
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 充当寻呼机
只需杀死父进程。打开一个终端,使用pstree -p
查找进程的进程ID(PID)git
,然后kill -9
它。在我的系统上,它看起来像这样:
$ pstree -p
...
├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331
不完全优雅,但它有效。在您的系统上,pager
可能会有所不同,但它将git
作为父进程。