git-diffの出力の空白に色を付ける


151

コードのフォーマットについては、私は一種の純粋主義者です:)。不要な空白(wsだけの行、行の終わりにwsなど)を削除することがよくあります。私はvimを設定して、そのような線を赤に着色するように示しています。

私の問題は、git-diffを使用すると、次のようなものがよく見られることです。

-      else{ 
+      else{

git-diffで色を付けても違いがわかりません(その特定の状況では、行末の1 wsを削除しました)。wsが赤に色付けされていることをgit-diffに伝える方法はありますか?(たとえば、/ \ s + $ / regexpと一致するもの)。


4
色を反転させる(前景と背景を入れ替える)と、このような空白の変更が表示されます。多くの端末でこれを行う簡単な方法は、問題のテキストをマウスで強調表示することです。もちろん、このトリックは色付きの差分でのみ機能します。
Phlarx 2017年

回答:


172

たとえば、次のように、color.diff.whitespace構成設定を設定する必要がある場合があります。

 git config color.diff.whitespace "red reverse"

(とにかく色付きのパッチが表示されると言ったので、すでに持っているcolor.diffか、color.ui設定済みであると想定しています。)autogit diff

あなたは微調整に赤で強調表示され、空白のエラーの種類をしたい場合は、その後、変更することができますcore.whitespace、しかし、blank-at-eolあなたはおそらくたとえば、あなたが言及することを変更する必要はありませんので、デフォルトで有効になっています。

考えられる混乱の原因は、の出力でgit diff、空白のエラーが削除された行ではなく、導入された行でのみ強調表示されることです。(更新: Paul Whittaker が彼の回答で指摘しているよう、これは賛成投票する必要があります:) git diff -R。差分の意味をで逆にすることで、これらを確認できます。

これらの設定オプションの詳細については、git configのmanページをご覧ください。

-Rkludge を使用したくない場合は、diffのmanページのWhiteSpace Error Highlightオプションを使用できます

--ws-error-highlight =

color.diff.whitespaceで指定された色で、で指定された行の空白エラーを強調表示します。古い、新しい、コンテキストのコンマ区切りのリストです。このオプションを指定しない場合、新しい行の空白エラーのみが強調表示されます。例--ws-error-highlight = new、oldは、削除された行と追加された行の両方で空白エラーを強調表示します。古い、新しい、コンテキストの省略形として使用できます。

git diff --ws-error-highlight=new,old <file>

または

git diff --ws-error-highlight=all <file>

エイリアスを使用する以外に、これを永続的にオンにしてconfigに保存する方法がわかりません。

git config alias.df 'diff --ws-error-highlight=all'

今、あなたは使うことができます:

git df <file>

赤の変化を見るため。

ことを注意Gitの2.11(Q4 2016)で、このエイリアスに置き換えされることがあります。

git config diff.wsErrorHighlight all

オンgit diffオンのgit configドキュメントを参照してください。


33
「混乱の原因として考えられるのは、git diffの出力で、空白のエラーが削除された行ではなく、導入された行でのみ強調表示されることです。」丁度!そして、削除された行にもそれを表示する方法はありませんか?(ねえ、それは差分です:))
raderek

6
〜/ .gitconfigに設定する--globalを追加します
simlmx

17
@radarek:逆のオプションを使用できます:git diff -R
blueyed

6
これに関するバグレポートはありますか?そうでない場合は、あるはずです。
Ajedi32 2014

3
これはうまくいったgit config diff.wsErrorHighlight allgit config --global [...]変更をグローバルにする(つまり、すべてのリポジトリに影響する)ために使用します。
フェリペアルバレス

141

git diff -R削除された行を追加された行に変換するために使用します。次に、末尾の空白が強調表示されます。

(これは、Markの回答の色設定に従って、空白の強調表示がすでに有効になっていることを前提としています。このメソッドのクレジットは、Junioの投稿http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal-にあります。 with-git-diff-td5653205.html

たとえば、ファイルをDOSの行末からUnixに変換すると、行の終わりgit diff -Rに表示される^M(dis)文字がはっきりと表示されます。なし-R(およびなし-wなど)は、ファイル全体が変更されたことを示しますが、その方法は示しません。


4
もちろん、git diff | cat -A | less -S必死になっている場合にも実行できますが、キャリッジリターンに加えて、cat文字通りエスケープコードを強調表示する色も表示されます。
Paul Whittaker

3
@Paul_Whittaker cat -Aは移植可能ではありません。BSD猫では、そのようなオプションはありません。cat -vet代わりに使用してください。
7heo.tk 2015

9

を使用しgit diff --color | less -Rます。これ-Rにより、色制御コードが人間にわかりやすくなります。

次にless、の正規表現検索を使用できます。

/[[:space:]]+$

vimちなみに、この正規表現はでも機能します。
ホセ・アルバン

この最後のアイデアはless -R、私が簡単にパイプls --colorスルーできるようにしただけlessです。
Menachem 2016

0

の私のバージョンはgit diffすでにこれをしているようです-私はgit 1.7.4.1を持っていて、設定しましたcolor.ui = auto


12
私はgit 1.7.5.1でテストしましたが、削除された行の末尾の空白は強調表示されません。
侵入者
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.