我已经设置vim为我的外部diff工具:
[diff]
external = git_diff_wrapper
#!/bin/sh
vimdiff "$2" "$5"
假设我有300个文件已经被修改了;在bash中,我输入"git diff"。它会顺序地启动300个vimdiff,如何中止它们?
使用 :cquit 命令退出 vim,并附上错误代码。Git 将检测到该错误并停止打开新的 vimdiff。您可能需要在 .vimrc 中为其创建映射:
nnoremap <Leader>q :cquit<CR>
if &diff
map Q :cquit<CR>
endif
按下 Q 键可提前退出 Git 差异运行。
为了使此功能正常工作,您必须编辑您的 gitconfig 文件:
git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
if &diff
映射的想法也很棒。谢谢大家! - pabogit diff
的shell本身可能更有效。请参见使用Vimdiff进行Git Diff。如果不想完全使用vimdiff
(我刚开始使用它),可以将以下内容放入“gitvimdiff
”中。结果是,通过运行“gitvimdiff
”,我可以使用vimdiff
查看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作为分页程序。
只需终止父进程。打开终端,使用pstree -p
查找git
进程的进程ID(PID),然后使用kill -9
命令结束它。在我的系统上,它看起来像这样:
$ pstree -p
...
├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331
这并不是很优雅,但它能够工作。在您的系统上,pager
可能会有所不同,但它将具有 git
作为父进程。
git mergetool
。 - user202729