less
itu sendiri tidak mampu melakukan penyorotan sintaksis, menurut utas ini .
Namun, git diff
dengan baik menunjukkan keluaran berwarna dalam lebih sedikit, pager defaultnya. Ketika saya mengarahkan output git diff
ke file, tidak ada urutan pelarian warna yang terlihat.
Apakah git diff
tahu ke mana ia dikirim, dan memformat output sesuai? Bagaimana seseorang melakukan itu?
Saya hanya memperhatikan bahwa git mewarnai diff
output (mis. git diff
), Namun, ia tidak tahu bagaimana cara syntax highlighting secara umum. misalnya
git show 415fec6:log.tex
tidak mengaktifkan sintaks seperti TeX.
Membaca git
sumber, saya menemukan petunjuk berikut
di diff.h
:
int use_color;
Saya sebelumnya mengacu pada penyorotan sintaks , tapi itu tidak benar. Yang saya maksud adalah pewarnaan keluaran, lihat misalnya
git diff --color=always | less -r
(atauless -R
untuk ANSI). BTW: untuk perintah lain yang tidak menggunakan paginasi secara default (git diff
tidak), Anda dapat mengaktifkannya:git -p some_git_command
Jawaban:
Git menggunakan
isatty()
untuk memeriksa apakah stdout adalah tty: ini digunakan untuk melihat apakah pager harus digunakan ( pager.c ) serta warna ( color.c ).sumber
Berlari:
menunjukkan warna lolos.
Sial saya menemukannya
git
dicolor.c
file:sumber
less
dapat mendukung warna dengan-r
--raw-control-chars
dan-R
--RAW-CONTROL-CHARS
Anda bisa menggunakan Python
pygmentize
untuk melakukan highlighting dan memasukkannya.Untuk menggabungkannya semua konfigurasikan filter yang kurang seperti yang dijelaskan pada superuser
sumber
git
benar-benar menggunakan pycrizeize? Karena itu tidak terdaftar sebagai ketergantungan.git diff
anakless
tidak ditambahkan oleh opsi apa pun (tidak-R
juga-r
). Namun, saya tidak tahu apakah git menyebutnya dengan cara khusus dan dengan demikian args tidak terlihat dihtop
.git
menampilkan kode pelarian warna itu sendiri. Ini juga ditulis denganc
menambahkan Python akan menjadi ketergantungan besar. Mungkin dapat mengontrolless
melalui lingkunganLESS
env var?