Bisakah lebih sedikit mempertahankan keluaran berwarna?

310

Bisakah saya mendapatkan lebih sedikit untuk tidak monokrom outputnya?

Misalnya, output dari git diffberwarna, tetapi git diff | lesstidak.

ripper234
sumber
mungkin sama pada superuser: superuser.com/questions/117841/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
Terkait tetapi tidak identik. Tautan lesshanya tentang .
Abel Cheung

Jawaban:

361

Menggunakan:

git diff --color=always | less -r

--color=alwaysada di sana untuk memberitahu gitkode warna output bahkan jika output adalah pipa (bukan tty). Dan -rapakah ada untuk memberitahu lessuntuk menafsirkan kode warna dan urutan pelarian lainnya. Gunakan hanya -Runtuk kode warna ANSI.

Stéphane Gimenez
sumber
3
@ ripper234. Dengan git baru-baru ini, git config color.ui trueharus cukup untuk mendapatkan keluaran berwarna, dan secara otomatis menjalankan pager untuk keluaran lama.
Stéphane Gimenez
4
Sejalan dengan Tanya Jawab ini, watch --color 'git diff --cached --color=always'dan teman-temannya dapat memberi Anda beberapa kedahsyatan tambahan.
Alois Mahdal
27
Tidak menggunakan yang less -Rlebih baik (atau export LESS=Rdalam /etc/profile)? Mengapa Anda mengizinkannya menampilkan apa pun selain urutan pelarian "warna" ANSI? Juga, halaman manual mengatakanWarning: when the -r option is used, less cannot keep track of the actual appearance of the screen (since this depends on how the screen responds to each type of control character). Thus, various display problems may result, such as long lines being split in the wrong place.
x-yuri
5
Dan jika Anda lupa menentukan -ropsi, Anda bisa mengetik "-r" di lessprompt. Ini tentu saja bekerja dengan sebagian besar atau lebih sedikit opsi (mis. -iUntuk mengaktifkan ignorecase).
haridsv
3
grep --color=alwaysbekerja dengan cara yang sama. Ini bukan bagian dari pertanyaan atau jawaban ini, tapi saya dapatkan di sini dari googling tentang pertanyaan itu jadi itu dia.
Frank Bryce
57

Pilihan lain adalah mengaktifkan warna dan menggunakan 'less -r' sebagai pager Anda.

git config --global color.ui true
git config --global core.pager 'less -r'

Ini menghasilkan

[color]
    ui = true
[core]
    pager = less -r

di ~ / .gitconfig Anda

Untuk informasi lebih lanjut, lihat buku Pro Git .

Gerald Senarclens de Grancy
sumber
7
Menggunakan Git 2.11, saya menemukan bahwa color.ui trueitu tidak bekerja dengan pager, tetapi color.ui alwaysberhasil. Ini mungkin telah berubah sejak jawabannya diposting.
Tom Zych
1
Opsi ini (untuk mengaktifkan warna dan menggunakan 'less -r' sebagai pager Anda secara default) dengan color.ui truemelakukan pekerjaan untuk perintah seperti git -p diffdan git -p status(di mana -partinya menyalurkan semua output ke $ PAGER, secara default itu less) bahkan untuk versi git yang agak lama (misalnya , Git 1.7.1). Tetapi Anda masih perlu color.ui always(yang memberitahu git untuk mengeluarkan kode warna "bahkan jika keluarannya berupa pipa (bukan tty)") untuk mendapatkan keluaran berwarna ketika Anda secara langsung menentukan git status | less -ratau git diff | less -r. Ketika Anda menentukan pengalihan output secara eksplisit, Anda tidak akan melihat output setelah keluar dari pager.
kenichi
29

Gunakan opsi -r( --raw-control-chars) untuk lebih sedikit, atau juga -R(hanya urutan pelarian ANSI).

Saya memiliki alias untuk ini di ~/.bashrc

alias rless='less -r'
enzotib
sumber
7
Sebenarnya saya baru saja melakukannya alias less='less -r'. Ada alasan untuk tidak melakukannya?
ripper234
3
@ ripper234: Saya samar-samar ingat mungkin ada kasus ketika menggunakan -rketika tidak diperlukan dapat menyebabkan masalah visualisasi.
enzotib
1
Misalnya, ketika Anda mengirim pipa ackdengan less -rAnda kehilangan carriage return
New Alexandria
6
Anda bisa menggunakannya \lessjika visualisasi kacau.
Brian Peterson
4
Eh, Anda tidak perlu alias lessapa pun, cukup atur $LESSvariabel lingkungan ke set flag yang selalu ingin Anda berikan less, misalnyaexport LESS='-MRq -z-2 -j2’
wjv
14

Juga treememiliki opsi untuk memaksa warna:

tree -C | less -r

Dan seterusnya untuk ls:

ls -lR --color | less -r
Antonio Bardazzi
sumber
10

Hanya untuk menambahkan versi lain pada "gunakan less -r":

gunakan variabel lingkungan KURANG dengan nilai r (atau tambahkan r untuk apa pun yang sudah ada)

misalnya, saat saya menggunakannya di .bashrc saya

  export LESS=-Xr

(X menghentikan layar dari kliring ketika keluar lebih sedikit)

MortenSickel
sumber
1
sayangnya -X juga merusak gulir mouse untuk saya: c
Xerus
3

Saya tahu ini sudah lama dan banyak yang sudah memberikan jawaban yang benar, tetapi saya ingin menambahkan bahwa itu selalu lebih baik untuk digunakan less -Rdan tidak less -rjika Anda hanya membutuhkan warna ANSI karena -rmasalah masalah dalam menampilkan karakter.

Dari manual:

   -r or --raw-control-chars
          Causes "raw" control characters to be displayed.   The  default
          is  to display control characters using the caret notation; for
          example, a control-A (octal 001) is displayed as  "^A".   Warn‐
          ing:  when the -r option is used, less cannot keep track of the
          actual appearance of the screen (since this depends on how  the
          screen responds to each type of control character).  Thus, var‐
          ious display problems may result,  such  as  long  lines  being
          split in the wrong place.

   -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
Naheel
sumber