回答:
diff
色を出力できない場合は、そのような別のプログラムが必要colordiff
です。端末の色は、デフォルトでは解釈されないANSIエスケープコードを介して印刷されます。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
必要があります。
alias diff='diff --color=always'
中.bashrc
または.zshrc
ファイルを。
alias diff='diff --side-by-side --left-column --color=always'
alias diff='/usr/bin/diff --color=always '
しalias less='/usr/bin/less -r '
ますが、diffは最初はlessの最初の数ページで色付けされますが、長いdiffでは時々モノに戻ります。これは、出力に一度だけ生成され、ジャンプする必要がないため、diffに明らかに影響しないジャンプである可能性がありますが、何らかの形で色の追跡が失われます。
色付きのdiffを以下にパイプするには:
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へのパイプは、lessを閉じると出力を失うためです。stderrへのパイピングにより、lessが表示されなくても出力を取得します。
別の(そして、私が思うに、より良い)方法は、単に-Xを使用して、画面があまりクリアされないようにすることです。
diff -uw $file1 $file2 | colordiff | less -r -X -F
これは私にはうまくいきますが、bashに固有のものかもしれません。colordiffは組み込みではありませんが、簡単にインストールできます。
less -r
less -RM +Gg
:superuser.com/questions/64972/...