Khi đọc một tệp có `less` hoặc` more`, làm cách nào tôi có thể có được nội dung bằng màu sắc?


415

Khi tôi đọc một tệp trong Linux bằng lệnh lesshoặc more, làm cách nào tôi có thể nhận được nội dung bằng màu sắc?


5
Điều này có vẻ liên quan: superuser.com/questions/36022/less-and-grep-color - nó có giúp ích gì không?
Jonik

7
Tiêu đề của câu hỏi này là rất sai lệch. Nhiều người hạ cánh trên trang này mong đợi một giải pháp cho vấn đề màu, bạn sẽ nhận được khi đường ống một lệnh với sản lượng màu để less: màu sắc bị mất. (Các câu trả lời cho vấn đề đường ống mà liên quan đến mà liên quan đến less -R, unbufferv.v.) Nhưng câu hỏi thực tế đề cập đến việc mở một tệp ! - Sự mơ hồ chủ yếu nằm ở tiêu đề của câu hỏi, nhưng ngay cả bên cạnh đó, IMHO câu hỏi vẫn còn quá rộng: đọc một tập tin, có thể tham khảo bất kỳ tập tin nào (có thể là văn bản thuần túy). (tốt, có được nội dung trong màu sắc, có lẽ là đề cập đến việc tô sáng cú pháp.)
myrdd

Tôi cần phải sửa chữa bản thân mình, chỉ có 3 (hoặc 4) 14 câu trả lời bị thiếu câu hỏi thực tế của OP: các câu trả lời bằng ChristopheD , PuneetOnlyjob ; và có thể jbbr . Tuy nhiên, hai trong số những câu trả lời đó là một phần của ba câu trả lời cao nhất.
myrdd

@myrdd "tô sáng cú pháp" là thuật ngữ có liên quan sau đó ... (Nó hỏi về việc hiển thị màu sắc, không thêm màu sắc?) less -Rcũng sẽ hoạt động trên các tệp, ví dụ:ls --color=always > /tmp/file && less -R /tmp/file
Gert van den Berg

1
@myrdd Có thể có ý nghĩa nhất khi câu hỏi được đóng lại vì "không rõ điều gì đang được hỏi" vì các câu hỏi hỏi bất kỳ ai trong hai người có thể sẽ bị đánh dấu là trùng lặp của điều này ... (Và câu trả lời cho bất kỳ câu hỏi nào trong hai dựa trên cách cử tri diễn giải nó ...) (Trường hợp sử dụng của tôi là một tệp nhật ký (thật khó chịu) có mã thoát màu trong đó)
Gert van den Berg

Câu trả lời:


149

Bạn có thể sử dụng sức mạnh của pyributionize với ít hơn - tự động! (Không cần ống bằng tay.)

Cài đặt pygmentsvới trình quản lý gói hoặc pip của bạn (có thể được gọi python-pygments) hoặc tải xuống tại đây http://pygments.org/doad/ .

Viết một tập tin ~/.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

Trong .bashrcphần thêm của bạn

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

Ngoài ra, bạn cần phải thực hiện ~/.lessfilterbằng cách chạy

chmod u+x ~/.lessfilter

Đã thử nghiệm trên Debian.

Bạn có được ý tưởng. Điều này tất nhiên có thể được cải thiện hơn nữa, chấp nhận nhiều tiện ích mở rộng hoặc phân tích shebang cho các thông dịch viên khác ngoài bash. Xem một số câu trả lời khác cho điều đó.

Ý tưởng xuất phát từ một bài đăng blog cũ từ các nhà sản xuất Pygments , nhưng bài viết gốc không còn tồn tại nữa.


6
Nếu bạn muốn tô màu các tệp mã nguồn, bạn cũng cần phải thực hiện ~ / .lessfilter bằng cách chạy chmod u+x ~/.lessfilter. Bạn cũng cần phải cài đặt pyributionize ( pygments.org/doad ).
Sergiy Belozorov

Bất cứ ai cũng có thể xác nhận rằng điều này hoạt động vì nó không có tác dụng đối với tôi khi tôi thực hiện một lệnh nhưls -l | less
puk

7
@puk bạn có thể làm một cái gì đó như ls --color=always -l | less -R. Rõ ràng là rất nhiều để gõ nhưng bạn có thể đặt bí danh cho một cái gì đó như ll. Đó là nếu bạn không muốn sử dụng bất kỳ thư viện bổ sung.
PhilT

2
thêm bình luận của @ SergiyByelozyorov vào câu trả lời.
andrybak

2
Chỉnh sửa của tôi đã bị từ chối vì vậy tôi đoán tôi sẽ đăng nó dưới dạng nhận xét: Đừng kiểm tra mã thoát lệnh một cách gián tiếp. Bạn có thể sử dụng if grep -q "#\!/bin/bash" "$1"(loại -qbỏ đầu ra tiêu chuẩn). Bạn có thể muốn chuyển hướng lỗi tiêu chuẩn với 2>/dev/null.
Tom Fenech

503

Hãy thử như sau:

less -R

từ man less:

-r hoặc là --raw-control-chars

Làm cho các ký tự điều khiển "thô" được hiển thị. (...)

-R hoặc là --RAW-CONTROL-CHARS

Giống như -r, nhưng chỉ các chuỗi thoát "màu" ANSI được xuất ra ở dạng "thô". (...)


17
Điều này hữu ích khi bản thân tệp chứa mã thoát sẽ cần được hiển thị.
Nitrodist

1
Tôi đã từng biết về ít -r nhưng tìm kiếm trong tệp bằng cách sử dụng "/" liên tục đưa ra các dòng sai. -R dường như làm một công việc tốt hơn. Cảm ơn vì tiền hỗ trợ.
Amos Shapira

54
Cần lưu ý rằng hầu hết các chương trình sử dụng tòa nhà isatty(2)để kiểm tra xem đầu ra tiêu chuẩn của chúng có phải là thiết bị đầu cuối hay không và thường vô hiệu hóa đầu ra được tô màu nếu không. Đối với bất kỳ đường ống nào ít hơn, isattysẽ trả về 0. Để kiểm tra xem điều này có hoạt động không, hãy thửecho -e '\x1b[32;1mtest\x1b[m' | less -r
mic_e

11
Câu trả lời này không xuất sắc trong thực tế làm một cái gì đó kiểm tra.
Michael Wolf

18
Bạn cũng có thể gõ -Rkhi bạn đã mở lessđể đạt được điều này.
Scz

138

Tôi đã nhận được câu trả lời trong một bài đăng khác: Ít hơn và Grep: Nhận kết quả được tô màu khi sử dụng một đường ống từ grep đến ít hơn

Khi bạn chỉ đơn giản chạy grep --colornó ngụ ý grep --color=autosẽ phát hiện xem đầu ra có phải là thiết bị đầu cuối hay không và nếu có cho phép màu sắc hay không. Tuy nhiên, khi phát hiện ra một đường ống, nó sẽ vô hiệu hóa màu. Lệnh sau:

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

Sẽ luôn bật màu và ghi đè phát hiện tự động, và bạn sẽ nhận được tô sáng màu ít hơn.

Cảnh báo: Đừng đặt --color=alwaysbí danh, đôi khi nó sẽ phá vỡ mọi thứ. Đó là lý do tại sao có một --color=autolựa chọn.


6
Tốt đẹp, cảm ơn. Ngoại trừ việc tôi cũng cần sử dụng -Rnhư một tùy chọn less.
không có

10
Tôi tin grep -Rlà để chỉ định tìm kiếm đệ quy. less -Rlà cần thiết lessđể nhổ chính xác các màu sắc trở lại. grep --color=always [grep cmds] | less -Rhoạt động với tôi trên OS X 10.7.3!
Steven Lu

@ naught101 @Steven Lu Đã chỉnh sửa, mặc dù có vẻ như một số người có thể không cần sử dụng less -R(theo tác giả của bài viết gốc, dù sao đi nữa).
jtpereyda

2
Có cách nào để cho grep biết chỉ cần lệnh less -R và sau đó chỉ tô màu không? Vì vậy, chúng ta không cần phải đặt --color = luôn luôn và ít hơn -R mọi lúc.
A-letubby 27/2/2015

1
Đây là câu trả lời đơn giản nhất. Cảm ơn!
Daniel Staple

37

Sử dụng viewthay vì less. Nó mở tập tin với vimchế độ chỉ đọc.

Nó thực tế là một màu less: một máy nhắn tin nơi bạn có thể tìm kiếm /(và hơn thế nữa). Hạn chế duy nhất là bạn không thể thoát ra qngoài nhưng bạn cần:q

Ngoài ra, bạn có được màu giống như vim(vì thực tế bạn đang sử dụng vim).


Làm thế nào về hiệu suất của các tập tin lớn? Làm nổi bật cú pháp Vim được biết là chậm trên các tệp lớn.
pieaveragy

Tôi không biết giá trị của bạn cho 'lớn' là gì, nhưng việc mở tệp ~ 10000 dòng là tức thời, bao gồm tìm kiếm bên trong.
Riccardo Galli

1
Tôi đã nâng cấp (tôi không biết về view) nhưng một nhược điểm khác là j / k / lên / xuống không cuộn ngay lập tức, vì có một con trỏ.
Tyler Collier

7
Lưu ý rằng bạn có thể cần thêm view -khi đường ống
user45909

6
vimlà một trình soạn thảo, tải tập tin hoàn chỉnh vào bộ nhớ, trong khi đó lesslà máy nhắn tin, chỉ tải một phần vào bộ nhớ. Bạn sẽ biết sự khác biệt với các tập tin lớn.
sjas

16

Để nói ít hơn để hiển thị màu sắc, hãy gọi nó bằng -R:

less -R

Thật không may, một số chương trình phát hiện ra rằng thiết bị xuất chuẩn của chúng không phải là thiết bị đầu cuối và vô hiệu hóa màu sắc - ví dụ: pacman (trình quản lý gói Arch Linux).

Trong những trường hợp có thể sử dụng unbuffer:

unbuffer <command> | less -R

Ví dụ sử dụng pacman

unbuffer pacman -Ss firefox | less -R

Các unbufferlệnh thường là một phần của gói expect(Arch Linux, Debian / Ubuntu) hoặc expect-dev(phiên bản di sản của Debian / Ubuntu).

Để trả lời cho câu hỏi cho đầy đủ:

Như những người khác đã trả lời, pygmentizerất tốt cho việc tô màu mã nguồn. Nó không yêu cầu unbuffer. Cuộc gọi dễ nhất:

pygmentize someSource.cpp | less -R

2
Để sử dụng unbuffertrên Ubuntu,sudo apt install expect
wvducky

Câu trả lời này cần nhiều upvote hơn.
Thomas Dignan

Tôi đã cố gắng chuyển đầu ra dmesg để kiểm tra lỗi khởi động nhưng màu sắc không hoạt động trừ khi tôi sử dụng unbuffer, điều này gây nhầm lẫn cho tôi: unbuffer dmesg | less -Rhoạt động như mong đợi.
pbhj

15

pygmentizehỗ trợ -gtùy chọn tự động đoán từ vựng sẽ được sử dụng, rất hữu ích cho các tệp được đọc STDINmà không cần kiểm tra bất kỳ loại tiện ích mở rộng nào.

Sử dụng điều đó, bạn chỉ cần đặt 2 lần xuất sau đây .bashrcmà không cần bất kỳ tập lệnh bổ sung nào:

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

4
Súc tích và hiệu quả. Tôi thích xác định một bí danh, bởi vì đôi khi ít hơn là tốt hơn. Vì vậy: alias lesc = 'LESS = "- R" LESSOPEN = "| pyributionize -g% s" less'
Tiago

9

Bạn đã không nói màu này có nghĩa là gì, ví dụ màu sắc nên là gì đối với tệp văn bản?

Nếu những gì bạn muốn là tô sáng cú pháp cho mã nguồn, bạn cần một công cụ tô sáng mã nguồn. Đôi khi tôi sử dụng pyributionize như thế này

pygmentize file.cpp | less

hoặc là

pygmentize file.cpp | more

Có những điểm nổi bật khác xung quanh.

Điều này là khá nhanh. Nếu bạn không phiền khi kích hoạt, vimcó một chế độ chỉ đọc có thể cung cấp cho bạn cú pháp tô sáng nếu bạn có nó vim.

view file.cpp

hoặc thay thế xem câu trả lời của churnd.


5

Đây là một câu trả lời dựa trên cơ sở khác , với một số cải tiến lớn:

  • không phá vỡ lesspipehoặc lessfilebộ lọc
  • hoạt động với nhiều đầu vào để less
  • phân tích chính xác loại tập lệnh từ tiêu đề shebang
  • hoạt động cho tất cả 434 loại tệp có thể lexable bởi Pygments
  • bảng màu được tham số hóa như một biến môi trường

Cài đặt Pygments và Gawk

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

Đặt biến môi trường

Kiểm tra xem đã lesspipehoặc lessfileđã được bật chưa:

echo $LESSOPEN

Nếu bạn không thấy một trong hai chương trình được tham chiếu ở đó, hãy đảm bảo rằng nó đã lesspipeđược cài đặt (hầu hết các bản phân phối đi kèm với nó).

Thêm vào như sau ~/.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'

Nếu bạn không muốn lesspipe, hãy thay thế evalcâu lệnh bằng:

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

Tạo nên ~/.lessfilter

Thêm mã sau đây và làm cho tập tin thực thi: 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

Một nhược điểm của phương pháp này là Pygments là một chương trình Python và do đó, lần đầu tiên sử dụng trong phiên shell, có độ trễ "khởi động nguội". Các yêu cầu tiếp theo là nhanh hơn nhiều.
Joe Coder

Đẹp! Thực sự toàn diện.
Dario Seidl

4

Sử dụng nguồn sáng GNU ; bạn có thể cài đặt nó aptnếu bạn có nó, hoặc cài đặt nó từ nguồn. Sau đó, thiết lập một "bộ tiền xử lý đầu vào" với giá thấp hơn, với sự trợ giúp từ các tài liệu của Source-highligh 'để thiết lập với ít hơn :

Điều này đã được đề xuất bởi Konstantine Serebriany. Kịch bản src-hilite-lesspipe.sh sẽ được cài đặt cùng với nguồn sáng. Bạn có thể sử dụng các biến môi trường sau:

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

Bằng cách này, khi bạn sử dụng ít hơn để duyệt một tệp, nếu đó là tệp nguồn được xử lý bằng tô sáng nguồn, nó sẽ được tự động tô sáng.

Xavier-Emmanuel Vincent gần đây đã cung cấp một phiên bản thay thế của bảng màu ANSI, esc256.style: một số thiết bị đầu cuối có thể xử lý 256 màu. Xavier cũng cung cấp một tập lệnh kiểm tra xem có bao nhiêu màu mà thiết bị đầu cuối của bạn có thể xử lý và trong trường hợp, sử dụng biến thể 256. Kịch bản được gọi là source-highlight-esc.sh và nó sẽ được cài đặt cùng với các nhị phân khác.


3

Để mở rộng dựa trên câu trả lời khác, bạn có thể làm cho nó hoạt động được hầu hết nếu không phải tất cả các tập lệnh của bạn không có tiện ích mở rộng bằng cách thay đổi tệp .lessfilter chỉ một chút:

#!/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

Bạn vẫn cần thêm hai biến vào .bashrc:

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

Và bạn vẫn sẽ cần phải thực hiện .lessfilter:

$ chmod 700 ~/.lessfilter

Ngoài ra tôi muốn thêm rằng theo debian, gói pygments được gọi là python-pygments. Lúc đầu, tôi gặp khó khăn trong việc định vị nó bởi vì lỗi chính tả rõ ràng của "sắc tố" là "pygments" không đủ gợi ý cho tôi rằng đó là một gói có thể được tiền tố là "python-" của người quản lý gói.


2
2 bình luận: 1) Cảm ơn sự cải thiện. 2) Các cụm từ như "câu trả lời hay nhất được bình chọn" không hay; điều đó có thể thay đổi (trên thực tế, nếu điều này tốt hơn câu trả lời đó, bài đăng này có thể trở thành câu trả lời hàng đầu, tại thời điểm đó nó sẽ gây nhầm lẫn. Có thể chỉ cần nói "để mở rộng câu trả lời khác" hoặc "câu trả lời của đội trưởng"?
cpast

2

Bạn có thể xem xét sử dụng mosttiện ích thay thế thân thiện với màu sắc lessmore.


bạn có thể chỉ cho chúng tôi một ví dụ? Tôi đã thử ở đây, và đầu ra là màu đen và trắng.
danilo

Đầu vào của bạn nên chứa màu sắc. Đầu tiên tạo ra một mẫu được tô màu (ví dụ ccze -A </var/log/dpkg.log, ls -1 --color /var/log) sau đó chuyển nó sang most: ls -1 --color /var/log | most.
Onlyjob

vâng, tôi đã sử dụng : git status | less --color,git status | most --color
danilo

Tôi đã sử dụng hầu hết, nhiều hơn, ít hơn và tất cả các công cụ hiển thị màu đen và trắng
danilo

Hãy chắc chắn rằng lệnh của bạn tạo ra màu sắc trước khi chuyển sang lesshoặc khác. Hãy chắc chắn rằng trình giả lập thiết bị đầu cuối của bạn có thể xuất màu. Kiểm tra TERMbiến môi trường. Đọc thêm trong unix.stackexchange.com/questions/148/ Bang Khi có thể sử dụng bản phân phối GNU + Linux hiện đại như Debian . Sử dụng công cụ tìm kiếm (ví dụ: duckduckgo.com startpage.com ) để tìm câu trả lời. Hãy nhớ rằng ý kiến ​​không phải để thảo luận.
Onlyjob

2

Ngưng tụ từ bài đăng trên blog đầy đủ của tôi về việc cải thiện ít kinh nghiệm hơn: https://www.toporms.net/blog/2016/09/27/make-gnu-less-more-powerful/

Đối với các trang có nhiều màu sắc, hãy thêm các mục sau vào .bashrchoặc .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

Để làm nổi bật cú pháp, sử dụng một công cụ mạnh hiện có lesspipe.shđể xử lý nó thay vì tự viết: https://github.com/wofr06/lesspipe


1

Tôi tìm thấy giải pháp thanh lịch đơn giản này. Bạn không cần phải cài đặt thêm bất cứ thứ gì vì nó đã có sẵn trên hầu hết các máy. Như vimđược cài đặt theo mặc định trên hầu hết các máy, nó bao gồm một macro để chạy vimnhưless

Một số tùy chọn để sử dụng nó là tạo bí danh: alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

hoặc tạo một liên kết tượng trưng: ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Sau đó, bạn chỉ cần chạy vless myfile.py

Tôi đã nhận được hầu hết các thông tin ở đây


1
Tôi có alias lesser='/usr/share/vim/vim80/macros/less.sh'trong ~/bash_aliases(trong Ubuntu 18,04). Có thể sử dụng các phím tắt như f tiến, b lùi, d nửa xuống, u nửa lên, q thoát, v.v ...
Daniel

0

Giải pháp trực tiếp và trực tiếp nhất đối với tôi là sử dụng pygmentize
bằng cách thêm các dòng bên dưới vào .bashrc

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

Trong trường hợp bạn không thể gọi pygmentize, chỉ cần cài đặt như

pip install pygments

ps. Các pygmentizethực thi nhị phân sẽ ngồi trong /usr/local/bin/hay ở của bạn /home/username/.virtualenv/venvname/bin/hoặc nơi nào đó.


-2

Không ai trong số này làm việc ngoài hộp cho tôi và tôi đã tìm ra một cách dễ dàng để thực hiện công việc này vì vậy tôi nghĩ rằng tôi sẽ chia sẻ.

Chỉ cần sử dụng tmux, cho phép bạn truy cập và cuộn qua một lịch sử lớn hơn và giữ được màu sắc hoàn hảo.


1
Không tmux cho phép nhiều thiết bị đầu cuối từ một màn hình, làm thế nào để nó thay đổi hiển thị màu sắc ít hơn?
Xen2050

@ Xen2050 Tôi nghĩ đó là một cách giải quyết gọn gàng mặc dù câu trả lời này không giải thích cách vào chế độ cuộn (Ctrl-b + [)
siikamiika

-2

Miễn là văn bản đầu ra có các ký tự điều khiển màu, less -Rsẽ làm.


Đây là những gì một câu trả lời khác (từ 9 năm trước) nói. Câu trả lời trùng lặp các câu trả lời khác không hữu ích.
Kamil Maciorowski

Công bằng, nhưng câu trả lời đó không làm cho nó rõ ràng rằng nó chỉ hoạt động trên các tệp được xây dựng với các ký tự điều khiển màu.
Leonardo Raele
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.