Saat membaca file dengan `kurang` atau` lebih`, bagaimana saya bisa mendapatkan konten dalam warna?

415

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

Buka jalannya
sumber
5
Ini sepertinya terkait: superuser.com/questions/36022/less-and-grep-color - apakah itu membantu?
Jonik
7
Judul pertanyaan ini sangat menyesatkan. Banyak orang mendarat di halaman ini mengharapkan solusi untuk pewarnaan masalah yang Anda akan dapatkan ketika pipa perintah dengan output berwarna ke less: warna hilang. (Jawaban untuk "masalah perpipaan" melibatkan less -R, unbufferdll.) Tapi pertanyaan sebenarnya mengacu pada membuka file ! - Ambiguitas terutama terletak pada judul pertanyaan, tetapi bahkan di samping itu, pertanyaan IMHO masih terlalu luas: "baca file" bisa merujuk ke file apa pun (mungkin teks biasa). (well, "dapatkan konten dalam warna" mungkin merujuk pada penyorotan sintaks.)
myrdd
Saya perlu mengoreksi diri saya sendiri, hanya 3 (atau 4) dari 14 jawaban yang hilang dari pertanyaan aktual OP: jawaban oleh ChristopheD , Puneet dan Onlyjob ; dan mungkin jbbr . Namun, dua dari jawaban itu adalah bagian dari tiga jawaban tertinggi.
myrdd
@myrdd "highlight sintaks" adalah istilah yang relevan kemudian ... (Ia menanyakan tentang menunjukkan warna, bukan menambahkan warna?) less -Rakan bekerja pada file juga, misalnyals --color=always > /tmp/file && less -R /tmp/file
Gert van den Berg
1
@ myrdd Mungkin akan lebih masuk akal jika pertanyaan ditutup sebagai "tidak jelas apa yang ditanyakan" karena pertanyaan yang diajukan salah satu dari keduanya kemungkinan akan ditandai sebagai duplikat dari ini ... (Dan jawaban untuk salah satu dari keduanya dapat dibatalkan suaranya) berdasarkan bagaimana pemilih mengartikannya ...) (Kasus penggunaan saya adalah file log yang (secara mengganggu) memiliki kode pelarian warna di dalamnya)
Gert van den Berg

Jawaban:

149

Anda dapat memanfaatkan kekuatan pyratingize dengan kurang - secara otomatis! (Tidak perlu pipa dengan tangan.)

Instal pygmentsdengan manajer paket Anda atau pip (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";;

    *)
        if grep -q "#\!/bin/bash" "$1" 2> /dev/null; then
            pygmentize -f 256 -l sh "$1"
        else
            exit 1
        fi
esac

exit 0

Di .bashrcadd Anda

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

Anda juga perlu membuat ~/.lessfilterexecutable dengan menjalankan

chmod u+x ~/.lessfilter

Diuji pada Debian.

Anda mendapatkan idenya. Ini tentu saja dapat ditingkatkan lebih lanjut, menerima lebih banyak ekstensi atau mengurai shebang untuk penerjemah lain daripada bash. Lihat beberapa jawaban lain untuk itu.

Idenya datang dari posting blog lama dari pembuat Pygments , tetapi posting asli tidak ada lagi.

Dario Seidl
sumber
6
Jika Anda ingin mewarnai file kode sumber, Anda juga perlu membuat ~ / .lessfilter dapat dijalankan dengan menjalankan chmod u+x ~/.lessfilter. Anda juga perlu menginstal pygmentize ( pygments.org/download ).
Sergiy Belozorov
Adakah yang bisa mengkonfirmasi bahwa ini berfungsi karena tidak berpengaruh bagi saya ketika saya menjalankan perintah sepertils -l | less
puk
7
@ puk Anda dapat melakukan sesuatu seperti ls --color=always -l | less -R. Jelas banyak mengetik tetapi Anda bisa alias untuk sesuatu seperti ll. Itu jika Anda tidak ingin menggunakan perpustakaan tambahan.
PhilT
2
menambahkan komentar @ SergiyByelozyorov ke dalam jawabannya.
andrybak
2
Hasil edit saya ditolak jadi saya kira saya akan mempostingnya sebagai komentar: Jangan menguji kode keluar dari perintah secara tidak langsung. Anda dapat menggunakan if grep -q "#\!/bin/bash" "$1"( -qmenekan output standar). Anda mungkin ingin mengarahkan kesalahan standar dengan 2>/dev/null.
Tom Fenech
503

Coba yang berikut ini:

less -R

dari man less:

-r atau --raw-control-chars

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

-R atau --RAW-CONTROL-CHARS

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

ChristopheD
sumber
17
Ini berguna ketika file itu sendiri berisi kode pelarian yang perlu ditampilkan.
Nitrodist
1
Saya dulu tahu tentang -r tetapi mencari dalam file menggunakan "/" terus memunculkan baris yang salah. -R tampaknya melakukan pekerjaan yang lebih baik. Terima kasih atas tipnya.
Amos Shapira
54
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 setiap pipa menjadi kurang, isattyakan mengembalikan 0. Untuk memeriksa apakah ini berhasil, cobaecho -e '\x1b[32;1mtest\x1b[m' | less -r
mic_e
11
Jawaban ini tidak unggul dalam benar-benar melakukan tes sesuatu.
Michael Wolf
18
Anda juga dapat mengetik -Rketika Anda sudah membuka lessuntuk mencapai ini.
Scz
138

Saya mendapat jawaban di posting lain: Less and Grep: Mendapatkan hasil berwarna saat menggunakan pipa dari grep menjadi kurang

Ketika Anda menjalankannya, grep --coloritu tersirat grep --color=autoyang mendeteksi apakah output adalah terminal dan jika demikian memungkinkan warna. Namun, ketika mendeteksi sebuah pipa, ia menonaktifkan pewarnaan. Perintah berikut:

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

Akan selalu mengaktifkan pewarnaan dan menimpa deteksi otomatis, dan Anda akan mendapatkan sorotan warna dalam waktu kurang.

Peringatan: Jangan dimasukkan --color=alwayssebagai alias, terkadang hal itu rusak. Itu sebabnya ada --color=autopilihan.

Puneet
sumber
6
Terima kasih banyak. Kecuali bahwa saya perlu menggunakan -Rsebagai opsi untuk less, juga.
naught101
10
Saya percaya grep -Rini untuk menentukan pencarian rekursif. less -Rdiperlukan untuk lessmemuntahkan kembali warna dengan benar. grep --color=always [grep cmds] | less -Rbekerja untuk saya di OS X 10.7.3!
Steven Lu
@ naught101 @Steven Lu Diedit, walaupun tampaknya beberapa orang mungkin tidak perlu menggunakan less -R(menurut penulis posting asli, sih).
jtpereyda
2
Apakah ada cara untuk memberi tahu grep tentang hanya sedikit perintah -R dan kemudian hanya mewarnai? Jadi, kita tidak harus meletakkan --color = selalu dan kurang -R sepanjang waktu.
A-letubby
1
Sejauh ini, inilah jawaban yang paling sederhana. Terima kasih!
Danny Staple
37

Gunakan viewsebagai ganti less. Ini membuka file dengan vimmode readonly.

Ini praktis berwarna less: pager di mana Anda dapat mencari dengan /(dan banyak lagi). Satu-satunya kelemahan adalah bahwa Anda tidak dapat keluar qtetapi Anda perlu:q

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

Riccardo Galli
sumber
Bagaimana dengan kinerja file besar? Menyoroti sintaks Vim diketahui lambat pada file besar.
pihentagy
Saya tidak tahu apa nilai Anda untuk 'besar', tetapi membuka file ~ 10.000 baris adalah instan, termasuk pencarian di dalamnya.
Riccardo Galli
1
Saya terbalik (saya tidak tahu tentang view) tetapi downside lain adalah bahwa j / k / atas / bawah tidak langsung menggulir, karena ada kursor.
Tyler Collier
7
Perhatikan bahwa Anda mungkin perlu menambahkan view -ketika pemipaan
user45909
6
vimadalah editor, yang memuat file lengkap ke dalam memori, sedangkan lesspager, memuat file hanya sebagian ke dalam memori. Anda akan tahu bedanya dengan file besar.
sjas
16

Untuk memberi tahu lebih sedikit untuk menunjukkan warna, panggil dengan -R:

less -R

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

Dalam kasus-kasus itu dimungkinkan untuk digunakan unbuffer:

unbuffer <command> | less -R

Contoh menggunakan pacman

unbuffer pacman -Ss firefox | less -R

The unbufferPerintah biasanya bagian dari paket expect(Arch Linux, Debian / Ubuntu) atau expect-dev(versi warisan Debian / Ubuntu).

Untuk menjawab pertanyaan tentang kelengkapan:

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

pygmentize someSource.cpp | less -R
jbbr
sumber
2
Untuk digunakan unbufferdi Ubuntu,sudo apt install expect
wisbucky
Jawaban ini membutuhkan lebih banyak upvotes.
Thomas Dignan
Saya mencoba untuk mem-pipe output dmesg untuk memeriksa kesalahan boot tetapi warnanya tidak bekerja kecuali saya menggunakan unbuffer, yang membingungkan saya: unbuffer dmesg | less -Rberfungsi seperti yang diharapkan.
pbhj
15

pygmentizemendukung -gopsi untuk secara otomatis menebak lexer yang akan digunakan yang berguna untuk membaca file STDINtanpa memeriksa jenis ekstensi apa pun.

Dengan menggunakan itu, Anda hanya perlu menetapkan 2 ekspor berikut di Anda .bashrctanpa skrip tambahan:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Tuxdude
sumber
4
Ringkas dan efektif. Saya lebih suka mendefinisikan alias, karena terkadang lebih sedikit lebih baik. Jadi: alias lesc 'LESS = "- R" LESSOPEN = "| pygmentize -g% s" less'
Tiago
9

Anda tidak mengatakan apa arti warna ini, misalnya apa warna untuk file teks?

Jika yang Anda inginkan adalah penyorotan sintaksis untuk kode sumber, Anda memerlukan penyorot kode sumber. Saya kadang-kadang menggunakan pyrativeize seperti ini

pygmentize file.cpp | less

atau

pygmentize file.cpp | more

Ada beberapa highlighters di sekitar.

Ini cukup cepat. Jika Anda tidak keberatan menjalankannya, vimada mode hanya baca yang dapat memberi Anda sorotan sintaks jika Anda memilikinya vim.

view file.cpp

atau alternatifnya lihat jawaban churnd.

Benjamin Bannier
sumber
5

Ini adalah jawaban lain yang berbasis pygments , dengan beberapa peningkatan besar:

  • tidak rusak lesspipeatau lessfilefilter
  • bekerja dengan beberapa input less
  • dengan benar mem-parsing jenis skrip dari header shebang
  • berfungsi untuk semua 434 jenis file yang dapat dijelaskan oleh Pygments
  • skema warna diparameterisasi sebagai variabel lingkungan

Instal Pygments dan Gawk

sudo apt-get install python-pygments python3-pygments gawk

Setel Variabel Lingkungan

Periksa apakah lesspipeatau lessfilesudah diaktifkan:

echo $LESSOPEN

Jika Anda tidak melihat salah satu program direferensikan di sana, pastikan lesspipesudah terpasang (sebagian besar distro menyertainya).

Tambahkan yang berikut ke ~/.bashrc:

# sets LESSOPEN and LESSCLOSE variables
eval "$(SHELL=/bin/sh lesspipe)"

# interpret color characters
export LESS='-R'

# to list available styles: `pygmentize -L styles`
export PYGMENTIZE_STYLE='paraiso-dark'

# optional
alias ls='ls --color=always'
alias grep='grep --color=always'

Jika Anda tidak mau lesspipe, ganti evalpernyataan itu dengan:

export LESSOPEN='|~/.lessfilter %s'

Membuat ~/.lessfilter

Tambahkan kode berikut dan buat file tersebut dapat dieksekusi: chmod u+x ~/.lessfilter

#!/bin/bash
for path in "$@"; do
    # match by known filenames
    filename=$(basename "$path")
    case "$filename" in
        .bashrc|bash.bashrc|.bash_aliases|.bash_environment|.bash_profile|\
        .bash_login|.bash_logout|.profile|.zshrc|.zprofile|.zshrc|.zlogin|\
        .zlogout|zshrc|zprofile|zshrc|zlogin|zlogout|.cshrc|.cshdirs|\
        csh.cshrc|csh.login|csh.logout|.tcshrc|.kshrc|ksh.kshrc)
            # shell lexer
            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE -l sh "$path"
            ;;
        .htaccess|apache.conf|apache2.conf|Dockerfile|Kconfig|external.in*|\
        standard-modules.in|nginx.conf|pacman.conf|squid.conf|termcap|\
        termcap.src|terminfo|terminfo.src|control|sources.list|CMakeLists.txt|\
        Makefile|makefile|Makefile.*|GNUmakefile|SConstruct|SConscript|\
        .Rhistory|.Rprofile|.Renviron|Rakefile|Gemfile|PKGBUILD|autohandler|\
        dhandler|autodelegate|.vimrc|.exrc|.gvimrc|vimrc|exrc|gvimrc|todo.txt)
            # filename recognized
            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE "$path"
            ;;
        *)
            ext=$([[ "$filename" = *.* ]] && echo ".${filename##*.}" || echo '')
            case "$ext" in
                .as|.mxml|.bc|.g|.gd|.gi|.gap|.nb|.cdf|.nbp|.ma|.mu|.at|.run|\
                .apl|.adl|.adls|.adlf|.adlx|.cadl|.odin|.c-objdump|.s|\
                .cpp-objdump|.c++-objdump|.cxx-objdump|.d-objdump|.S|.hsail|\
                .ll|.asm|.ASM|.objdump-intel|.objdump|.tasm|.au3|.ahk|.ahkl|\
                .bb|.decls|.bmx|.bas|.monkey|.BAS|.bst|.bib|.abap|.ABAP|.cbl|\
                .CBL|.cob|.COB|.cpy|.CPY|.gdc|.maql|.p|.cls|.c|.h|.idc|.cpp|\
                .hpp|.c++|.h++|.cc|.hh|.cxx|.hxx|.C|.H|.cp|.CPP|.ino|.clay|\
                .cu|.cuh|.ec|.eh|.mq4|.mq5|.mqh|.nc|.pike|.pmod|.swg|.i|.vala|\
                .vapi|.capnp|.chpl|.icl|.dcl|.cf|.docker|.ini|.cfg|.inf|\
                .pc|.properties|.reg|.tf|.pypylog|.cr|.csd|.orc|.sco|.css|\
                .less|.sass|.scss|.croc|.d|.di|.smali|.jsonld|.json|.yaml|\
                .yml|.dpatch|.darcspatch|.diff|.patch|.wdiff|.boo|.aspx|.asax|\
                .ascx|.ashx|.asmx|.axd|.cs|.fs|.fsi|.n|.vb|.als|.bro|.crmsh|\
                .pcmk|.msc|.pan|.proto|.pp|.rsl|.sbl|.thrift|.rpf|\
                .dylan-console|.dylan|.dyl|.intr|.lid|.hdp|.ecl|.e|.elm|.ex|\
                .exs|.erl|.hrl|.es|.escript|.erl-sh|.aheui|.befunge|.bf|.b|\
                .camkes|.idl4|.cdl|.cw|.factor|.fan|.flx|.flxh|.frt|.f|.F|\
                .f03|.f90|.F03|.F90|.PRG|.prg|.go|.abnf|.bnf|.jsgf|.cyp|\
                .cypher|.asy|.vert|.frag|.geo|.plot|.plt|.ps|.eps|.pov|.inc|\
                .agda|.cry|.hs|.idr|.kk|.kki|.lagda|.lcry|.lhs|.lidr|.hx|\
                .hxsl|.hxml|.sv|.svh|.v|.vhdl|.vhd|.dtd|.haml|.html|.htm|\
                .xhtml|.xslt|.pug|.jade|.scaml|.xml|.xsl|.rss|.xsd|.wsdl|\
                .wsf|.xpl|.pro|.ipf|.nsi|.nsh|.spec|.i6t|.ni|.i7x|.t|.io|\
                .ijs|.coffee|.dart|.eg|.js|.jsm|.juttle|.kal|.lasso|\
                .lasso[89]|.ls|.mask|.j|.ts|.tsx|.jl|.aj|.ceylon|.clj|\
                .cljs|.golo|.gs|.gsx|.gsp|.vark|.gst|.groovy|.gradle|.ik|\
                .java|.kt|.pig|.scala|.xtend|.cpsa|.cl|.lisp|.el|.hy|.lsp|.nl|\
                .kif|.rkt|.rktd|.rktl|.scm|.ss|.shen|.xtm|.cmake|.mak|.mk|\
                .[1234567]|.man|.md|.css.in|.js.in|.xul.in|.rst|.rest|.tex|\
                .aux|.toc|.m|.sci|.sce|.tst|.ml|.mli|.mll|.mly|.opa|.sml|.sig|\
                .fun|.bug|.jag|.mo|.stan|.def|.mod|.mt|.ncl|.nim|.nimrod|.nit|\
                .nix|.cps|.x|.xi|.xm|.xmi|.mm|.swift|.ooc|.psi|.psl|.G|.ebnf|\
                .rl|.treetop|.tt|.adb|.ads|.ada|.pas|.dpr|.pwn|.sp|.pl|.pm|\
                .nqp|.p6|.6pl|.p6l|.pl6|.6pm|.p6m|.pm6|.php|.php[345]|.zep|\
                .praat|.proc|.psc|.lgt|.logtalk|.prolog|.pyx|.pxd|.pxi|.dg|\
                .py3tb|.py|.pyw|.sc|.tac|.sage|.pytb|.qvto|.Rout|.Rd|.R|.rq|\
                .sparql|.ttl|.r|.r3|.reb|.red|.reds|.txt|.rnc|.graph|\
                .instances|.robot|.fy|.fancypack|.rb|.rbw|.rake|.gemspec|\
                .rbx|.duby|.rs|.rs.in|.SAS|.sas|.applescript|.chai|.ezt|\
                .mac|.hyb|.jcl|.lsl|.lua|.wlua|.moo|.moon|.rexx|.rex|.rx|\
                .arexx|.sh|.ksh|.bash|.ebuild|.eclass|.exheres-0|.exlib|.zsh|\
                .sh-session|.shell-session|.bat|.cmd|.fish|.load|.ps1|.psm1|\
                .tcsh|.csh|.ns2|.st|.smv|.snobol|.rql|.sql|.sqlite3-console|\
                .do|.ado|.scd|.tcl|.rvt|.ng2|.tmpl|.spt|.cfc|.cfm|.cfml|\
                .evoque|.kid|.handlebars|.hbs|.phtml|.jsp|.liquid|.mao|.mhtml|\
                .mc|.mi|.myt|.rhtml|.tpl|.ssp|.tea|.twig|.vm|.fhtml|.sls|\
                .feature|.tap|.awk|.vim|.pot|.po|.weechatlog|.todotxt|.thy|\
                .lean|.rts|.u|.vcl|.bpl|.sil|.vpr|.cirru|.duel|.jbst|.qml|\
                .qbs|.slim|.xqy|.xquery|.xq|.xql|.xqm|.whiley|.x10)
                    # extension recognized
                    pygmentize -f 256 -O style=$PYGMENTIZE_STYLE "$path"
                    ;;
                *)
                    # parse the shebang script header if it exists
                    lexer=$(head -n 1 "$path" |grep "^#\!" |awk -F" " \
'match($1, /\/(\w*)$/, a) {if (a[1]!="env") {print a[1]} else {print $2}}')
                    case "$lexer" in
                        node|nodejs)
                            # workaround for lack of Node.js lexer alias
                            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE \
                                -l js "$path"
                            ;;
                        "")
                            exit 1
                            ;;
                        *)
                            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE \
                                -l $lexer "$path"
                            ;;
                    esac
                    ;;
            esac
            ;;
    esac
done
exit 0
Joe Coder
sumber
Satu kelemahan tentang pendekatan ini adalah bahwa Pygments adalah program Python, dan seterusnya digunakan pertama kali selama sesi shell, ada penundaan "cold start". Doa selanjutnya jauh lebih cepat.
Joe Coder
Bagus! Sangat komprehensif.
Dario Seidl
4

Gunakan GNU Source-highlight ; Anda dapat menginstalnya aptjika Anda memilikinya, atau menginstalnya dari sumber. Kemudian siapkan "input preprocessor" dengan harga lebih murah, dengan bantuan dari dokumentasi Source-highligh untuk menyiapkan lebih sedikit :

Ini disarankan oleh Konstantine Serebriany. Script src-hilite-lesspipe.sh akan diinstal bersama dengan source-highlight. Anda dapat menggunakan variabel lingkungan berikut:

 export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
 export LESS=' -R '

Dengan cara ini, ketika Anda menggunakan lebih sedikit untuk menelusuri file, jika itu adalah file sumber yang ditangani oleh sumber-highlight, itu akan secara otomatis disorot.

Xavier-Emmanuel Vincent baru-baru ini menyediakan versi alternatif skema warna ANSI, esc256.style: beberapa terminal dapat menangani 256 warna. Xavier juga menyediakan skrip yang memeriksa berapa banyak warna yang bisa ditangani oleh terminal Anda, dan jika-kalau, menggunakan varian 256. Script disebut source-highlight-esc.sh dan akan diinstal bersama dengan binari lainnya.

arsaKasra
sumber
3

Untuk memperluas jawaban lain, Anda dapat membuatnya berfungsi untuk sebagian besar, jika tidak semua skrip Anda yang tidak memiliki ekstensi dengan mengubah file .lessfilter sekitar hanya sedikit:

#!/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"
        ;;
    *)
        scriptExec=$(head -1 "$1" |grep "^#\!" |awk -F" " '{print $1}')
        scriptExecStatus=$?
        if [ "$scriptExecStatus" -eq "0" ]; then
            lexer=$(echo $scriptExec |awk -F/ '{print $NF}')
            pygmentize -f 256 -l $lexer "$1"
        else
            exit 1
        fi
esac

exit 0

Anda masih perlu menambahkan dua variabel ke .bashrc:

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

Dan Anda masih perlu membuat .lessfilter dapat dieksekusi:

$ chmod 700 ~/.lessfilter

Saya juga ingin menambahkan bahwa di bawah debian paket pygments disebut python-pygments. Awalnya saya kesulitan menemukannya karena salah mengeja "pigmen" sebagai "pigmen" tidak cukup bagi saya bahwa itu adalah paket yang mungkin diawali dengan "python-" oleh manajer paket.

Speeddymon
sumber
2
2 komentar: 1) Terima kasih atas perbaikannya. 2) Frasa seperti "jawaban terbaik terpilih" tidak bagus; yang mungkin berubah (pada kenyataannya, jika ini lebih baik dari jawaban itu, pos ini mungkin menjadi jawaban teratas, pada titik itu hanya akan membingungkan. Mungkin hanya mengatakan "untuk memperluas jawaban lain" atau "jawaban kapten komunikasi"?
cpast
2

Anda dapat mempertimbangkan menggunakan mostutilitas yang merupakan alternatif ramah warna untuk lessdan more.

Onlyjob
sumber
dapatkah Anda tunjukkan satu contoh kepada kami? Saya mencoba di sini, dan hasilnya adalah hitam dan putih.
danilo
Input Anda harus mengandung warna. Pertama menghasilkan sampel colorised (misalnya ccze -A </var/log/dpkg.log, ls -1 --color /var/log) maka pipa ke most: ls -1 --color /var/log | most.
Onlyjob
ya, saya menggunakan: git status | less --color,git status | most --color
danilo
Saya menggunakan sebagian besar, lebih banyak, lebih sedikit, dan semua alat menunjukkan hitam dan putih
danilo
Pastikan bahwa perintah Anda menghasilkan warna sebelum dikirim ke lessatau orang lain. Pastikan emulator terminal Anda dapat menampilkan warna. Periksa TERMvariabel lingkungan. Baca lebih lanjut di unix.stackexchange.com/questions/148/… Bila memungkinkan gunakan distribusi GNU + Linux modern seperti Debian . Gunakan mesin pencari (misalnya duckduckgo.com startpage.com ) untuk menemukan jawaban. Ingat bahwa komentar bukan untuk diskusi.
Onlyjob
2

Ringkas dari posting blog lengkap saya tentang meningkatkan pengalaman yang lebih sedikit: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/

Untuk manual berwarna-warni, tambahkan yang berikut ke Anda .bashrcatau .zshrc:

export LESS_TERMCAP_mb=$'\E[1;31m'     # begin bold
export LESS_TERMCAP_md=$'\E[1;36m'     # begin blink
export LESS_TERMCAP_me=$'\E[0m'        # reset bold/blink
export LESS_TERMCAP_so=$'\E[01;44;33m' # begin reverse video
export LESS_TERMCAP_se=$'\E[0m'        # reset reverse video
export LESS_TERMCAP_us=$'\E[1;32m'     # begin underline
export LESS_TERMCAP_ue=$'\E[0m'        # reset underline

Untuk penyorotan sintaksis, gunakan kuasa yang ada lesspipe.shuntuk menanganinya alih-alih menulis sendiri: https://github.com/wofr06/lesspipe

xuhdev
sumber
1

Saya menemukan solusi elegan sederhana ini. Anda tidak perlu menginstal tambahan apa pun karena sudah ada secara default di sebagian besar mesin. Seperti vimyang diinstal secara default pada kebanyakan mesin, itu termasuk makro untuk dijalankan vimsepertiless

Beberapa opsi untuk menggunakannya adalah membuat alias: alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

atau buat tautan simbolis: ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Maka Anda hanya lari vless myfile.py

Saya mendapat sebagian besar informasi di sini

Wavesailor
sumber
1
Saya miliki alias lesser='/usr/share/vim/vim80/macros/less.sh'di ~/bash_aliases(di Ubuntu 18.04). Dapat menggunakan pintasan seperti f maju, b mundur, d setengah turun, u setengah atas, q keluar, dll ...
Daniel
0

Solusi yang paling intuitif dan lurus untuk saya gunakan pygmentize
dengan menambahkan baris di bawah ini ke .bashrc

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

Jika Anda tidak dapat menelepon pygmentize, cukup instal like

pip install pygments

ps. The pygmentizebiner executable akan duduk di /usr/local/bin/atau di Anda /home/username/.virtualenv/venvname/bin/atau di suatu tempat.

David Jung
sumber
-2

Tidak ada yang berhasil di luar kotak untuk saya dan saya menemukan cara mudah untuk membuat pekerjaan ini jadi saya pikir saya akan berbagi.

Cukup gunakan tmux, yang memungkinkan Anda mengakses dan menggulir melalui sejarah yang lebih besar dan mempertahankan warna dengan sempurna.

math0ne
sumber
1
Bukankah tmux mengizinkan beberapa terminal dari satu layar, bagaimana cara mengubah tampilan warna yang lebih sedikit?
Xen2050
@ Xen2050 Saya pikir ini merupakan solusi yang rapi meskipun jawaban ini tidak menjelaskan cara masuk ke mode gulir (Ctrl-b + [)
siikamiika
-2

Selama teks keluaran memiliki karakter kontrol warna, less -Rakan dilakukan.

Leonardo Raele
sumber
Inilah jawaban lain (dari 9 tahun lalu). Jawaban yang menduplikasi jawaban lain tidak berguna.
Kamil Maciorowski
Adil, tetapi jawaban itu tidak membuatnya eksplisit bahwa itu hanya berfungsi pada file yang dibangun dengan karakter kontrol warna.
Leonardo Raele