diff
tidak dapat menampilkan warna, Anda memerlukan program lain, seperti colordiff
untuk itu. Warna dalam terminal dicetak melalui kode pelarian ANSI yang kurang diartikan secara default. Untuk less
menampilkan warna dengan benar, Anda memerlukan -r
, atau bahkan lebih baik, -R
beralih:
colordiff -- "$file1" "$file2" | less -R
Dari 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.
Atau, Anda dapat menggunakan more
yang akan menampilkan warna dengan benar secara default.
Jika Anda tidak dapat menginstal program eksternal, Anda harus bisa mendapatkan hasil yang sama menggunakan pendekatan yang lebih manual:
diff a b |
perl -lpe 'if(/^</){$_ = "\e[1;31m$_\e[0m"}
elsif(/^>/){$_ = "\e[1;34m$_\e[0m"}'
less -RM +Gg
: superuser.com/questions/64972/…Jawaban lain di sini mungkin sudah ketinggalan zaman. Pada coreutils 3.5
diff
memang dapat menghasilkan keluaran berwarna yang dimatikan secara default ketika stdout bukan konsol.Dari halaman manual:
Untuk memaksa keluaran warna ketika stdout adalah pipa
diff --color=always -- "$file1" "$file2" | less -R
harus bekerja.sumber
alias diff='diff --color=always'
dalam.bashrc
atau.zshrc
file.alias diff='diff --side-by-side --left-column --color=always'
alias diff='/usr/bin/diff --color=always '
danalias less='/usr/bin/less -r '
tetapi meskipun diff awalnya berwarna pada beberapa halaman pertama kurang tetapi pada diff panjang kadang-kadang membalik kembali ke mono. Ini mungkin pada lompatan yang jelas tidak akan mempengaruhi diff, karena outputnya hanya dihasilkan satu kali dan tidak harus melompat, tetapi entah bagaimana kurang kehilangan jejak warna.Untuk menyalurkan diff berwarna kurang:
Agar lebih mudah dibaca, dengan membatasi ke satu layar:
Dan, yang menyebabkan kurang untuk tidak ditampilkan jika hanya ada satu konten yang bernilai:
-F menyebabkan kurang segera menutup jika ada kurang dari satu layar worht konten, pipa ke stderr adalah karena ketika kurang menutup Anda kehilangan output - dengan menyalurkan ke stderr, itu mendapatkan output bahkan jika kurang tidak menampilkan.
Cara alternatif (dan, saya pikir, lebih baik), adalah dengan menggunakan -X untuk mencegah kurang membersihkan layar:
Ini berfungsi baik untuk saya, tetapi mungkin khusus untuk bash. colordiff bukan built-in, tetapi mudah dipasang.
sumber
less -r