git format-patch
で作成されたパッチを取得したとします。ファイルは基本的に、いくつかのメタデータを含む統合された差分です。 Vimでファイルを開くと、変更された行を確認できますが、変更された行のどのcharactersが異なるかを確認できません。誰もが文字ごとの違いを視覚化する方法を知っていますか(Vim、またはUbuntu上で実行される他のフリーソフトウェア)?
文字ごとの差分が視覚化される反例は、vimdiff a b
の実行時です。
2010年11月12日金曜日22:36:23 UTC 2010更新
diffpatchが役立ちます 単一のファイルで作業しているシナリオの場合。
Thu Jun 16 17:56:10 UTC 2016を更新
git 2.9のdiff-highlight を確認してください。このスクリプトは、私が最初に求めていたものを正確に実行します。
質問でのVimへの言及を考えると、これがあなたの望む答えかどうかはわかりません:)が、Emacsはこれを行うことができます。差分を含むファイルを開き、diff-mode
にいることを確認します(ファイルの名前がfoo.diff
またはfoo.patch
の場合、これは自動的に行われます。 M-x diff-mode
RET)、興味のあるハンクに移動してヒット C-c C-b refine-hunk
の場合。または、ファイルを1つずつハンクします M-n;それは自動的に精製を行います。
Gitでは、コミットせずにマージできます。最初にパッチをマージしてから、次を実行します。
git diff --Word-diff-regex=.
等号の後のドットに注意してください。
以下は、git diff --Word-diff-regex=<re>
よりもノイズの少ない出力を備え、git diff --color-words --Word-diff-regex=<re>
よりも入力が少ないが同等のバージョンです。
シンプル(スペースの変更を強調表示します):
git diff --color-words
シンプル(個々のキャラクターの変更を強調表示し、スペースの変更を強調表示しません):
git diff --color-words=.
より複雑(スペースの変更を強調表示します):
git diff --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'
一般に:
git diff --color-words=<re>
ここで、<re>
は、変更を識別するために「単語」を定義する正規表現です。
これらは、変更された「単語」に色を付けるという点でノイズが少なくなりますが、--Word-diff-regex=<re>
を使用すると、一致する「単語」を色付きの-/+
マーカーで囲みます。
git diff --color-words="[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+"
上記の正規表現( from Thomas Rast )は、句読点/文字レベルでdiffフラグメントを分離する適切な仕事をします(--Word-diff-regex=.
)。
結果の出力のスクリーンショットを投稿しました here 。
更新:
この記事 にはいくつかの素晴らしい提案があります。具体的には、contrib/
gitリポジトリのツリーにはdiff-highlight
きめ細かいハイライトを表示するPerlスクリプト。
それを使用するためのクイックスタート:
$ curl https://git.kernel.org/cgit/git/git.git/plain/contrib/diff-highlight/diff-highlight > diff-highlight
$ chmod u+x diff-highlight
$ git diff --color=always HEAD~10 | diff-highlight | less -R
NodeJSのインストールに反対するものがない場合、「diff-so-fancy」( https://github.com/so-fancy/diff-so-fancy )というパッケージがあります。これは非常に簡単です。インストールして完全に動作する:
npm install -g diff-so-fancy
git diff --color | diff-so-fancy | less -R
編集:公式のdiff-highlightの実際のラッパーであることがわかりました...少なくとも、私のようなperlophobesの方が簡単にインストールでき、GitHubページはうまく文書化されています:)
文字ごとの差分ツールは認識していませんが、Wordごとの差分ツール:wdiffがあります。
例を参照してください NIX/Linuxのトップ4ファイル差分ツール– Diff、Colordiff、Wdiff、Vimdiff 。
少し調べてみると、最近Vimのメインメーリングリストでこの質問が2回出てきました。 NrrwRgnプラグイン が言及されました 両方times (2つの狭い領域を作成し、それらをdiffします)。 Christian Brabandtが説明したようにNrrwRgnを使用することは、ソリューションというよりは回避策のように感じますが、それで十分かもしれません。
NrrwRgnを試してみましたが、:diffthisと共に、単一ファイルの部分内の文字ごとの違いを示すのに実際に役立ちました。しかし、多くのキーストロークがかかりました。私のVimscriptはかなり錆びていますが、スクリプト化されている可能性があります。 NrrwRgnを拡張して、必要な機能を提供することができます。
考え?