2010-05-07 73 views
14

我有VIM設置爲我的外部比較工具:如何取消外部git diff?

[diff] 
     external = git_diff_wrapper 

#!/bin/sh 

vimdiff "$2" "$5" 

說我有已修改300個文件;通過bash,我輸入「git diff」。它連續發射300個vimdiffs,如何中止它?

+0

這是一個奇妙的問題有:) – vfclists 2017-08-21 14:04:33

回答

4

如果停止進程是不夠的,殺死shell本身(在其中啓動git diff)可能會更有效。

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


參見Git Diff with Vimdiff

VimDiff

沒有準備好去全速進入使用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 「[email protected]」 
fi 

但是,如果你仍然想修改git diff,一個git status可能推出之前幫助;)

而且,您可以設置是否需要一個函數來獲取舊git diff行爲:

我仍然可以通過--no-ext-diff標誌訪問默認的git diff行爲。這裏有一個功能,我把我的bash配置文件:

function git_diff() { 
    git diff --no-ext-diff -w "[email protected]" | vim -R - 
} 
  • --no-ext-diff:防止使用vimdiff同時
  • -w:忽略空白
  • -R:在只讀啓動Vim模式
  • -:使vim充當尋呼機
+0

的gitvimdiff別名是一個不錯的主意。 – v2k 2010-05-11 06:14:13

+1

噢,如果我沒有先閱讀這篇文章,我幾乎會經歷數百萬個'ctrl + q'。萬分感謝!! – shriek 2015-02-20 03:28:26

2

只要殺死父進程即可。打開一個終端,使用pstree -p來查找git進程的進程ID(PID),然後使用kill -9它。在我的系統上,它看起來像這樣:

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

不完全優雅,但它的工作原理。在您的系統上,pager可能會有所不同,但它會有git作爲父級進程。

17

使用:cquit退出vim並顯示錯誤代碼。 Git會檢測錯誤並停止打開新的vimdiffs。你可能想要在你的.vimrc中爲它創建一個映射:

if &diff 
    map Q :cquit<CR> 
endif 

然後只要點擊Q就可以早點退出git diff運行。

爲了這個工作,你必須編輯gitconfig:

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

這應該是被接受的答案,因爲它直接解決問題而不是提供解決方法。 「if&diff」映射也非常棒。感謝所有! – pabo 2014-12-12 19:04:16

+1

它不適合我,如何配置? – songhir 2015-08-15 02:26:32

+0

這不適合我。我不是指映射,而是指:cquit命令本身。 Vim正常退出,但Git仍然繼續進行差異化處理。 – kai 2015-09-18 14:42:52