我将VIM设置为我的外部差异工具:

[diff]
        external = git_diff_wrapper

#!/bin/sh

vimdiff "$2" "$5"

说我有300个已修改的文件;通过bash,我键入“ git diff”。它依次启动300个Vimdiffs,如何中止它?

有帮助吗?

解决方案

如果停止该过程还不够,请杀死外壳本身(您在其中启动 git diff)可能更有效。

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


也可以看看 vimdiff的git差异

VimDiff

没有准备好全速使用 vimdiff (我只是新手),我将以下内容列入gitvimdiff’.
结果是我可以使用 vimdiff 通过跑步看git-diff'gitvimdiff',但是正常的调用'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 如果需要的话,

我仍然可以使用默认的git差异行为 --no-ext-diff 旗帜。这是我在bash配置文件中添加的功能:

function git_diff() {
  git diff --no-ext-diff -w "$@" | vim -R -
}
  • --no-ext-diff: :防止使用Vimdiff
  • -w: :忽略空格
  • -R: :要以仅阅读模式启动vim
  • -: :使VIM充当打印机

其他提示

使用:用错误代码退出VIM。 GIT将检测到错误,并停止打开新的Vimdiffs。您可能想在.vimrc中为其创建一个映射:

if &diff
  map Q :cquit<CR>
endif

然后只需从git差异跑步即可到达Q。

为了这样做,您必须编辑gitconfig:

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

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

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

并非完全优雅,但它起作用。在您的系统上 pager 可能会有所不同,但它会有 git 作为父过程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top