色付きの出力を生成するgit diffを使用しています。ただし、何かに通常のdiffを使用する必要があることがわかりました。色が不足しているため、出力が大量に出力され、読みにくくなっています。 diffで読みやすい色付きの出力を作成するにはどうすればよいですか?大きなファイルを簡単に確認できるように、パイプを少なくするのが理想的です。
diff
は色を出力できません。そのためにはcolordiff
などの別のプログラムが必要です。端末の色は ANSIエスケープコード を介して出力されますが、lessはデフォルトでは解釈しません。 less
に色を正しく表示させるには、-r
、またはさらに良い、-R
スイッチ:
colordiff -- "$file1" "$file2" | less -R
man less
:
-R or --RAW-CONTROL-CHARS
Like -r, but only ANSI "color" escape sequences are
output in "raw" form. Unlike -r, the screen appearance
is maintained correctly in most cases. ANSI "color"
escape sequences are sequences of the form:
ESC [ ... m
where the "..." is zero or more color specification
characters For the purpose of keeping track of screen
appearance, ANSI color escape sequences are assumed to
not move the cursor. You can make less think that
characters other than "m" can end ANSI color escape
sequences by setting the environment variable LESSAN‐
SIENDCHARS to the list of characters which can end a
color escape sequence. And you can make less think
that characters other than the standard ones may appear
between the ESC and the m by setting the environment
variable LESSANSIMIDCHARS to the list of characters
which can appear.
または、デフォルトで色を正しく表示するmore
を使用できます。
外部プログラムをインストールできない場合、より手動のアプローチを使用して同じ出力を取得できるはずです。
diff a b |
Perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"}
elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'
ここでの他の回答は古くなっている可能性があります。 coreutils 3.5以降では、diff
は実際に色付きの出力を生成できます。これは、stdoutがコンソールでない場合、デフォルトでオフになっています。
Manページから:
--color[=WHEN]
出力に色を付けます。WHEN
は、never
、always
、またはauto
(デフォルト)にすることができます
Stdoutがパイプの場合にカラー出力を強制するにはdiff --color=always -- "$file1" "$file2" | less -R
は動作するはずです。
色付きのdiffをlessにパイプするには:
diff $file1 $file2 | colordiff | less -r
読みやすくするには、1つの画面に制限します。
diff -uw $file1 $file2 | colordiff | less -r
そして、コンテンツの画面が1つしかない場合に表示されないようにするには:
diff -uw $file1 $file2 | tee /dev/stderr | colordiff | less -r -F
-Fを指定すると、コンテンツの画面数が1未満の場合、lessはすぐに閉じます。stderrへのパイプは、closesを閉じたときに出力が失われるためです。
代替の(そして、私が思うに、より良い)方法は、-Xを使用して画面のクリアが少なくならないようにすることです。
diff -uw $file1 $file2 | colordiff | less -r -X -F
これは私にとってはうまく機能しますが、bashに固有の場合があります。 colordiffは組み込みではありませんが、簡単にインストールできます。