19

外部のdiffツールとしてvimをセットアップしました:

[diff]
        external = git_diff_wrapper

#!/bin/sh

vimdiff "$2" "$5"

変更されたファイルが300個あるとします。bash経由で、「gitdiff」と入力します。300個のvimdiffを順番に起動しますが、どうすれば中止できますか?

4

3 に答える 3

24

:cquitを使用して、エラーコードでvimを終了します。Gitはエラーを検出し、新しいvimdiffを開くのを停止します。おそらく、.vimrcにそのマッピングを作成することをお勧めします。

if &diff
  map Q :cquit<CR>
endif

次に、Qを押すだけで、gitdiffの実行を早期に中止できます。

これを機能させるには、gitconfigを編集する必要があります。

git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
于 2013-03-11T21:54:58.847 に答える
3

プロセスを停止するだけでは不十分な場合は、シェル自体(を起動したシェルgit diff)を強制終了する方が効果的な場合があります。

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


Vimdiffを使用したGitDiffも参照してください

VimDiff

フルスピードで使用する準備ができていないのでvimdiff(私はそれを初めて使用します)、「<code>gitvimdiff」に次のように記述します。
その結果、vimdiff「<code> gitvimdiff」を実行することでgit-diffを確認できますが、「<code>gitdiff」の通常の呼び出しは以前と同じように動作します。

#!/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 diffgit status起動する前に役立つ可能性があります;)

git diffまた、必要に応じて、古い動作を取得する関数を設定できます。

私はまだフラグを使ってデフォルトのgitdiffの振る舞いにアクセスできます--no-ext-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 に答える