Pertanyaan Dapatkan warna lebih sedikit atau lebih banyak


Ketika saya membaca file di Linux dengan perintah less atau more, bagaimana saya bisa mendapatkan konten dalam warna?


343
2018-03-09 10:44


asal


Ini sepertinya terkait: superuser.com/questions/36022/less-and-grep-color - apakah itu membantu? - Jonik


Jawaban:


Anda dapat memanfaatkan kekuatan pygasiize dengan lebih sedikit - secara otomatis! (Tidak perlu pipa dengan tangan.)

Memasang pygments dengan manajer paket atau pip Anda (mungkin disebut python-pygments) atau dapatkan di sini http://pygments.org/download/.

Tulis file ~/.lessfilter

#!/bin/sh
case "$1" in
    *.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\
    *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\
    *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
    *.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass)
        pygmentize -f 256 "$1";;
    .bashrc|.bash_aliases|.bash_environment)
        pygmentize -f 256 -l sh "$1"
        ;;
    *)
        grep "#\!/bin/bash" "$1" > /dev/null
        if [ "$?" -eq "0" ]; then
            pygmentize -f 256 -l sh "$1"
        else
            exit 1
        fi
esac

exit 0

Di dalam Anda .bashrc menambahkan

export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'

Juga, Anda perlu membuatnya ~/.lessfilter dieksekusi dengan menjalankan

chmod u+x ~/.lessfilter

Diuji pada Debian.

Idenya berasal dari posting blog lama dari pembuat Pygments, tetapi pos aslinya tidak ada lagi.


126
2017-09-20 03:29



Jika Anda ingin mewarnai file kode sumber, Anda juga harus membuat ~ / .lessfilter dieksekusi dengan menjalankan chmod u+x ~/.lessfilter. Anda juga harus melakukan pygasiize (pygments.org/download) terpasang. - Sergiy Byelozyorov
Adakah yang bisa memastikan bahwa ini bekerja karena tidak memiliki efek bagi saya ketika saya menjalankan perintah seperti ls -l | less - puk
Tahu bagaimana untuk rantai ini dengan lessopen.sh Vladimir Linek ?? sudah diatur dengan formulir ini: LESSOPEN = "lessopen.sh% s" - Gregory
@puk Anda dapat melakukan sesuatu seperti ls --color=always -l | less -R. Tentunya banyak yang harus diketik tetapi Anda bisa menyamakannya dengan sesuatu seperti ll. Itu jika Anda tidak ingin menggunakan pustaka tambahan. - PhilT
menambahkan komentar @ SergiyByelozyorov ke jawabannya. - andrybak


Coba yang berikut ini:

less -R

dari man less:

-r atau --raw-control-chars

Menyebabkan karakter kontrol "mentah" untuk ditampilkan. (...)

-R atau --RAW-CONTROL-CHARS

Seperti -r, tetapi hanya urutan pelarian "warna" ANSI yang dihasilkan dalam bentuk "mentah". (...)


407
2018-03-09 10:48



Ini berguna ketika file itu sendiri berisi kode pelarian yang perlu ditampilkan. - Nitrodist
Saya biasanya tahu tentang kurang -r tetapi mencari di file menggunakan "/" terus memunculkan baris yang salah. -R sepertinya melakukan pekerjaan yang lebih baik. Terima kasih atas tipnya. - Amos Shapira
Perlu dicatat bahwa sebagian besar program menggunakan isatty(2) syscall untuk memeriksa apakah output standar mereka adalah terminal, dan biasanya menonaktifkan output berwarna jika tidak. Untuk pipa apa pun menjadi lebih sedikit, isatty akan mengembalikan 0. Untuk memeriksa apakah ini berfungsi, coba echo -e '\x1b[32;1mtest\x1b[m' | less -r - mic_e
Jawaban ini tidak unggul dalam melakukan sesuatu tes. - Michael Wolf
Anda juga bisa mengetik -R ketika kamu sudah terbuka less untuk mencapai ini. - Scz


Saya mendapat jawabannya di posting lain: Kurang dan Grep: Mendapatkan hasil berwarna saat menggunakan pipa dari grep ke kurang

Ketika Anda hanya berlari grep --color saya t   menyiratkan grep --color=auto yang   mendeteksi apakah output adalah a   terminal dan jika demikian memungkinkan warna.   Namun, ketika mendeteksi pipa itu   Menonaktifkan pewarnaan. Pengikut   perintah:

grep --color=always "search string" * | less -R

Akan selalu memungkinkan mewarnai dan   mengganti deteksi otomatis, dan   Anda akan mendapatkan warna yang disoroti   kurang.

Peringatan: Jangan taruh --color=always sebagai alias, terkadang merusak beberapa hal. Itu sebabnya ada --color=auto pilihan.


116
2018-04-27 04:19



Terima kasih banyak. Kecuali yang harus saya gunakan -R sebagai opsi untuk less, demikian juga. - naught101
aku percaya grep -R adalah untuk menentukan pencarian rekursif. less -R diperlukan untuk less untuk benar memuntahkan warna kembali. grep --color=always [grep cmds] | less -R bekerja untuk saya di OS X 10.7.3! - Steven Lu
@ naught101 @Steven Lu Diedit, meskipun tampaknya beberapa orang mungkin tidak perlu menggunakannya less -R (menurut penulis posting asli, anyway). - jtpereyda
Apakah ada juga untuk membiarkan grep tahu hanya perintah pipe less -R dan kemudian lakukan pewarnaan saja? Jadi, kita tidak perlu menempatkan --color = always dan less -R sepanjang waktu. - A-letubby
Ini adalah jawaban yang paling sederhana. Terima kasih! - Danny Staple


Menggunakan view dari pada less. Ini membuka file dengan vim dalam mode hanya baca.

Ini praktis berwarna less: pager tempat Anda dapat mencari dengan / (dan banyak lagi). Satu-satunya kelemahan adalah Anda tidak bisa keluar q tetapi Anda perlu :q

Juga, Anda mendapatkan pewarnaan yang sama vim (karena Anda sebenarnya menggunakan vim).


30
2017-09-24 09:50



Bagaimana dengan kinerja file-file besar? Penyorotan sintaks Vim tahu harus lambat pada file besar. - pihentagy
Saya tidak tahu apa nilai Anda untuk 'besar', tetapi membuka file baris ~ 10000 adalah seketika, cari di dalam disertakan. - Riccardo Galli
Saya upvoted (saya tidak tahu tentang view) tetapi kelemahan lainnya adalah j / k / atas / bawah tidak langsung menggulir, karena ada kursor. - Tyler Collier
Perhatikan bahwa Anda mungkin perlu menambahkan view - saat piping - user45909
vim adalah editor, yang memuat file lengkap ke dalam memori, sedangkan less adalah pager, memuat file hanya sebagian ke dalam memori. Anda akan tahu perbedaannya dengan file besar. - sjas


Gunakan VIM sebagai pager penyorotan sintaks.


13
2018-03-09 13:25



tidak, saya meminta lebih (atau kurang), bukan untuk vim, terima kasih - flow
Jelas penyorotan sintaks tidak dibangun menjadi lebih atau kurang secara default, sehingga solusi ini menggunakan alias ke salah satu makro VIM. Ia berperilaku kurang lebih seperti kurang lebih. :) - churnd
Jika Anda lebih suka menggunakan vim, bukan vim meniru lebih sedikit, Anda bisa melakukannya ... | vim - untuk dibaca dari stdin, atau ... | vim -R - untuk hanya baca (untuk menghindari "Tidak menulis sejak perubahan terakhir" ketika berhenti). Alias ​​untuk penggunaan cepat: alias r='vim -R -' kemudian ... | r - bain


pygmentize mendukung -g pilihan untuk secara otomatis menebak lexer yang akan digunakan yang berguna untuk file yang dibaca dari STDIN tanpa memeriksa jenis ekstensi apa pun.

Menggunakan itu, Anda hanya perlu mengatur 2 ekspor berikut di Anda .bashrc tanpa skrip tambahan:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'

12
2018-03-12 07:17



Ringkas dan efektif. Saya lebih suka mendefinisikan alias, karena terkadang lebih sedikit lebih baik. Jadi: alias lesc = 'LESS = "- R" LESSOPEN = "| pygasiize -g% s" kurang' - Tiago


Anda tidak mengatakan apa arti warna ini, mis. apa seharusnya warna untuk file teks?

Jika yang Anda inginkan adalah penyorotan sintaks untuk kode sumber, Anda memerlukan penyorot kode sumber. Saya terkadang menggunakannya melakukan poligami seperti ini

pygmentize file.cpp | less

atau

pygmentize file.cpp | more

Ada sorotan lain di sekitar.

Ini cukup cepat. Jika Anda tidak keberatan menembak vim ada mode read-only yang dapat memberi Anda penyorotan sintaks jika Anda memilikinya vim.

view file.cpp

atau alternatifnya lihat jawaban churnd.


9
2018-03-09 13:30





Untuk memberi tahu kurang untuk menampilkan warna, hubungi dengan -R:

less -R

Sayangnya beberapa program mendeteksi bahwa stdout mereka bukan terminal dan menonaktifkan warna - misalnya pacman (manajer paket Linux Arch).

Dalam kasus-kasus itu mungkin untuk digunakan unbuffer:

unbuffer <command> | less -R

Contoh menggunakan pacman

unbuffer pacman -Ss firefox | less -R

Itu unbuffer perintah biasanya merupakan bagian dari expect-dev(Debian / Ubuntu) atau expect (Paket Arch Linux).

Untuk menjawab pertanyaan untuk kelengkapan:

Seperti yang sudah dijawab orang lain, pygmentize sangat bagus untuk mewarnai kode sumber. Itu tidak membutuhkan unbuffer. Panggilan termudah:

pygmentize someSource.cpp | less -R

8
2017-10-08 10:37