質問

外部DIFFツールとして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 diff

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, 、a git 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にポケットベルとして機能させる

他のヒント

使用:cquitエラーコードでVIMを終了します。 GITはエラーを検出し、新しいVimdiffsの開設を停止します。あなたはおそらくあなたの.vimrcでそれのマッピングを作成したいと思うでしょう:

if &diff
  map Q :cquit<CR>
endif

その後、Qを押して、Git Diff Runから早期中止します。

これが機能するには、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