`कम` या` अधिक` वाली फ़ाइल को पढ़ते समय, मैं रंगों में सामग्री कैसे प्राप्त कर सकता हूं?


413

जब मैं लिनक्स में कमांड के साथ फाइल पढ़ता हूं lessया more, मैं रंगों में सामग्री कैसे प्राप्त कर सकता हूं?


5
यह संबंधित लगता है: superuser.com/questions/36022/less-and-grep-color - क्या यह मदद करता है?
जोनिक

7
इस सवाल का शीर्षक बहुत ही भ्रामक है। इस पृष्ठ पर उतरने वाले बहुत से लोग रंग के मुद्दे के समाधान की उम्मीद करते हैं जो आपको रंगीन आउटपुट के साथ एक कमांड को पाइप करते समय मिलेगा less: रंग खो जाते हैं। (उस "पाइपिंग इश्यू" में शामिल होने के उत्तर less -R, unbufferआदि) लेकिन वास्तविक प्रश्न एक फ़ाइल खोलने का संदर्भ देता है ! - अस्पष्टता मुख्य रूप से प्रश्न के शीर्षक में निहित है, लेकिन इसके अलावा, IMHO प्रश्न अभी भी व्यापक है: "एक फ़ाइल पढ़ें" किसी भी फ़ाइल (शायद सादे पाठ) को संदर्भित कर सकता है । (ठीक है, "रंगों में सामग्री प्राप्त करें" शायद सिंटैक्स हाइलाइटिंग की बात कर रहा है।)
myrdd

मुझे अपने आप को सही करने की आवश्यकता है, 14 उत्तरों में से केवल 3 (या 4) ओपी के वास्तविक प्रश्न को याद कर रहे हैं: क्रिस्टोफीडी , पुनीत और ओंगजॉब के उत्तर ; और शायद jbbr । फिर भी, उन जवाबों में से दो सबसे ज्यादा वोट पाने वाले लोगों में से एक हैं।
मिथक

@ मिर्डड "सिंटैक्स हाइलाइटिंग" तब प्रासंगिक शब्द है ... (यह रंगों को दिखाने के बारे में पूछता है, रंगों को नहीं जोड़ना है?) less -Rफाइलों पर भी काम करेगा, जैसेls --color=always > /tmp/file && less -R /tmp/file
गर्ट वैन डेन बर्ग

1
@ मिर्डड यह प्रश्न को "अस्पष्ट क्या कहा जा रहा है" के रूप में बंद किए जाने के लिए सबसे अधिक समझदार हो सकता है क्योंकि दोनों में से किसी एक को पूछने वाले प्रश्नों को संभवतः इस के डुप्लिकेट के रूप में चिह्नित किया जाएगा ... (और दोनों में से किसी के लिए उत्तर को अस्वीकृत किया जा सकता है। मतदाता इसकी व्याख्या कैसे करता है ... (मेरे उपयोग का मामला एक लॉग फ़ाइल था जो (झुंझलाहट से) इसमें कलर एस्केप कोड है)
Gert van den Berg

जवाबों:


149

आप कम से स्वचालित रूप से pygmentize की शक्ति का उपयोग कर सकते हैं! (हाथ से पाइप करने की आवश्यकता नहीं है।)

pygmentsअपने पैकेज मैनेजर या पाइप के साथ स्थापित करें (संभवतः कहा जाता है python-pygments) या इसे यहाँ प्राप्त करें http://pyolution.org/download/

एक फ़ाइल लिखें ~/.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

अपने .bashrcऐड में

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

साथ ही, आपको ~/.lessfilterरनिंग करके निष्पादन योग्य बनाने की आवश्यकता है

chmod u+x ~/.lessfilter

डेबियन पर परीक्षण किया गया।

तुम्हें नया तरीका मिल गया है। यह निश्चित रूप से और सुधार किया जा सकता है, अधिक विस्तार को स्वीकार करने या बैश की तुलना में अन्य दुभाषियों के लिए शेबंग को पार्स करने के लिए। उसके लिए कुछ अन्य उत्तर देखें।

यह विचार एक पुराने ब्लॉग पोस्ट से आया था, जो कि Py Py के निर्माताओं से लिया गया था , लेकिन मूल पोस्ट अब मौजूद नहीं है।


6
यदि आप स्रोत कोड फ़ाइलों का रंग करना चाहते हैं, तो आपको रनिंग करके ~ / .lessfilter को निष्पादन योग्य बनाना होगा chmod u+x ~/.lessfilter। आपको pyactize ( pyolution.org/download ) भी इंस्टॉल करना होगा।
सर्गी बेलोज़ोरोव

क्या कोई इस बात की पुष्टि कर सकता है कि यह मेरे लिए कोई प्रभाव नहीं है जब मैं एक कमांड निष्पादित करता हूं जैसे किls -l | less
puk

7
@ पुक आप कुछ ऐसा कर सकते हैं ls --color=always -l | less -R। स्पष्ट रूप से बहुत कुछ टाइप करने के लिए, लेकिन आप इसे कुछ इस तरह से बदल सकते हैं ll। यदि आप किसी अतिरिक्त लाइब्रेरी का उपयोग नहीं करना चाहते हैं।
फिल्प जूल

2
उत्तर में @ SergiyByelozyorov की टिप्पणी जोड़ी।
एंड्रीबक

2
मेरा संपादन अस्वीकार कर दिया गया था इसलिए मुझे लगता है कि मैं इसके बजाय एक टिप्पणी के रूप में पोस्ट करूंगा: परोक्ष रूप से आदेशों के निकास कोड का परीक्षण न करें। आप if grep -q "#\!/bin/bash" "$1"( -qमानक उत्पादन को दबा सकते हैं )। आप मानक त्रुटि को पुनर्निर्देशित कर सकते हैं 2>/dev/null
टॉम फेन्च

500

निम्नलिखित प्रयास करें:

less -R

से man less:

-r या --raw-control-chars

प्रदर्शित होने के लिए "कच्चे" नियंत्रण वर्ण हैं। (...)

-R या --RAW-CONTROL-CHARS

जैसे -r, लेकिन केवल एएनएसआई "रंग" एस्केप सीक्वेंस "कच्चे" रूप में आउटपुट होते हैं। (...)


16
यह उपयोगी है जब फ़ाइल में ही भागने के कोड होते हैं जिन्हें प्रदर्शित करना होगा।
नाइट्रोडिस्ट

1
मैं कम -r के बारे में जानता था लेकिन "/" का उपयोग करके फ़ाइल में खोज करना गलत पंक्तियों को लाता रहा। -आर बेहतर काम करने लगता है। पारितोषिक के लिए धन्यवाद।
आमोस शापिरा

53
यह ध्यान दिया जाना चाहिए कि अधिकांश कार्यक्रम isatty(2)syscall का उपयोग यह जांचने के लिए करते हैं कि क्या उनका मानक आउटपुट एक टर्मिनल है, और आमतौर पर यदि यह नहीं है तो रंगीन आउटपुट को अक्षम करें। किसी भी पाइप को कम करने के लिए, isattyवापस आएगा 0. यह जांचने के लिए कि क्या यह काम करता है, कोशिश करेंecho -e '\x1b[32;1mtest\x1b[m' | less -r
mic_e

11
यह उत्तर वास्तव में कुछ परीक्षण नहीं करता है।
माइकल वुल्फ

18
-Rजब आप पहले से ही इसे lessप्राप्त करने के लिए खोलते हैं तो आप भी टाइप कर सकते हैं ।
7

138

मुझे एक अन्य पोस्ट में जवाब मिला: कम और ग्रेप: ग्रीप से कम तक पाइप का उपयोग करते समय रंगीन परिणाम प्राप्त करना

जब आप बस चलाते हैं तो grep --colorयह निकलता है grep --color=autoजो पता लगाता है कि आउटपुट एक टर्मिनल है और यदि ऐसा है तो रंगों को सक्षम बनाता है। हालांकि, जब यह एक पाइप का पता लगाता है तो यह रंग को निष्क्रिय कर देता है। निम्नलिखित आदेश:

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

हमेशा रंग को सक्षम करने और स्वचालित पहचान को ओवरराइड करने में सक्षम करेगा, और आपको कम में रंग उजागर करना मिलेगा।

चेतावनी: --color=alwaysएक उपनाम के रूप में मत रखो , यह कभी-कभी चीजों को तोड़ देता है। इसलिए एक --color=autoविकल्प है।


6
अच्छा धन्यवाद। सिवाय इसके कि मुझे -Rएक विकल्प के lessरूप में भी उपयोग करना होगा।
n

10
मेरा मानना grep -Rहै कि पुनरावर्ती खोज को निर्दिष्ट करने के लिए है। रंगों को सही ढंग से थूकने के less -Rलिए आवश्यक lessहै। grep --color=always [grep cmds] | less -Rओएस एक्स 10.7.3 पर मेरे लिए काम करता है!
स्टीवन लू

@ naught101 @Steven लू में संपादित, हालांकि ऐसा लगता है कि कुछ लोगों को less -R(मूल पोस्ट के लेखक के अनुसार, वैसे भी) का उपयोग करने की आवश्यकता नहीं हो सकती है ।
jtpereyda

2
वहाँ वैसे भी जाने के लिए सिर्फ पाइप कम -R कमांड पता grep है और फिर सिर्फ रंग करना है? इसलिए, हमें हर समय -रॉलर = हमेशा और कम-आर नहीं लगाना है।
ए-लेटबी

1
यह अब तक का सबसे सरल काम है। धन्यवाद!
डैनी स्टेपल

36

के viewबजाय का उपयोग करें less। यह फ़ाइल को आसानी vimसे मोड में खोलता है।

यह व्यावहारिक रूप से एक रंग है less: एक पेजर जहां आप /(और अधिक) के साथ खोज कर सकते हैं । एकमात्र दोष यह है कि आप बाहर नहीं निकल सकते qलेकिन आपको जरूरत है:q

इसके अलावा, आप उसी रंग में मिलते हैं जैसे vim(चूंकि आप वास्तव में उपयोग कर रहे हैं vim)।


बड़ी फ़ाइलों के प्रदर्शन के बारे में कैसे? विम सिंटैक्स हाइलाइटिंग को विशाल फ़ाइलों पर धीमा होना पता है।
pihentagy

मुझे नहीं पता कि 'बड़ी' के लिए आपका मूल्य क्या है, लेकिन ~ 10000 लाइनों की फाइल खोलना तात्कालिक है, इसमें शामिल खोज।
रिकार्डो गली

1
मैंने अपवोट किया (मुझे इसके बारे में पता नहीं था view) लेकिन एक और नकारात्मक पहलू यह है कि j / k / up / down तुरन्त स्क्रॉल नहीं करता है, क्योंकि एक कर्सर है।
टायलर Collier

7
ध्यान दें कि view -पाइपिंग करते समय आपको जोड़ना पड़ सकता है
user45909

6
vimएक संपादक है, जो पूरी फ़ाइल को मेमोरी में लोड करता है, जबकि lessपेजर है, फ़ाइल को केवल मेमोरी में आंशिक रूप से लोड करता है। आपको विशाल फ़ाइलों के साथ अंतर पता चल जाएगा।
जज 20'16

16

रंग दिखाने के लिए कम बताने के लिए इसे -R के साथ कॉल करें:

less -R

दुर्भाग्य से कुछ कार्यक्रमों से पता चलता है कि उनका स्टडआउट एक टर्मिनल और अक्षम रंग नहीं है - उदाहरण के लिए पैक्मैन (आर्क लिनक्स पैकेज मैनेजर)।

उन मामलों में इसका उपयोग करना संभव है unbuffer:

unbuffer <command> | less -R

उदाहरण pacman का उपयोग करना

unbuffer pacman -Ss firefox | less -R

unbufferआदेश आम तौर पैकेज का हिस्सा है expect(आर्क लिनक्स, Debian / Ubuntu के लिए) या expect-dev(Debian / Ubuntu की विरासत संस्करण)।

पूर्णता के लिए प्रश्न का उत्तर देने के लिए:

जैसा कि दूसरों ने पहले ही उत्तर दिया था, pygmentizeस्रोत कोड को रंगीन करने के लिए बहुत अच्छा है। इसकी आवश्यकता नहीं है unbuffer। सबसे आसान कॉल:

pygmentize someSource.cpp | less -R

2
unbufferउबंटू पर उपयोग करने के लिए ,sudo apt install expect
समझदारी से

इस उत्तर को और अधिक बढ़ाने की जरूरत है।
थॉमस डिगन

मैं बूट त्रुटियों पर जांच करने के लिए dmesg आउटपुट को पाइप करने की कोशिश कर रहा था, लेकिन रंग तब तक काम नहीं करता था जब तक कि मैं अनबफर का उपयोग नहीं करता, जो मुझे बाहर निकालने के लिए भ्रमित कर रहा था: unbuffer dmesg | less -Rअपेक्षा के अनुरूप काम करता है।
pbhj

15

pygmentizeकिसी भी प्रकार के विस्तार की जाँच किए बिना -gसे पढ़ी गई फ़ाइलों के लिए उपयोगी है जो उपयोग किए जाने वाले लेक्सर का अनुमान लगाने के लिए विकल्प का समर्थन करता है STDIN

इसका उपयोग करते हुए, आपको केवल .bashrcबिना किसी अतिरिक्त स्क्रिप्ट के निम्नलिखित 2 निर्यात सेट करने की आवश्यकता है :

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

4
संक्षिप्त और प्रभावी। मैं एक उपनाम को परिभाषित करना पसंद करता हूं, क्योंकि कभी-कभी कम बेहतर होता है। तो: उर्फ LESC = 'कम = "- आर" LESSOPEN = "| pygmentize जी% s" कम'
टैगो

9

आपने यह नहीं कहा कि इस रंग का क्या अर्थ होना चाहिए, जैसे कि टेक्स्ट फ़ाइल के लिए रंग क्या होना चाहिए?

यदि आप चाहते हैं कि स्रोत कोड के लिए वाक्य रचना हाइलाइटिंग है, तो आपको एक स्रोत कोड हाइलाइटर चाहिए। मैं कभी-कभी इस तरह से पाइनेटाइजेशन का उपयोग करता हूं

pygmentize file.cpp | less

या

pygmentize file.cpp | more

आसपास अन्य हाइलाइटर्स हैं।

यह बहुत तेज है। यदि आपको कोई आपत्ति नहीं vimहै तो एक रीड-ओनली मोड है जो आपके पास होने पर आपको सिंटैक्स हाइलाइटिंग दे सकता है vim

view file.cpp

या वैकल्पिक रूप से churnd का उत्तर देखें।


5

यह अभी तक कई अन्य सुधारों के साथ एक और pyolution -based जवाब है:

  • ब्रेक lesspipeया lessfileफ़िल्टर नहीं करता है
  • करने के लिए कई आदानों के साथ काम करता है less
  • सही ढंग से शेबंग हेडर से स्क्रिप्ट प्रकार को पार्स करता है
  • सभी 434 फ़ाइल प्रकारों के लिए काम करता है, जो कि पियुवेनेशन द्वारा lexable है
  • रंग योजना को पर्यावरण चर के रूप में परिचालित किया जाता है

प्याऊ और गौक स्थापित करें

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

पर्यावरण चर सेट करें

जाँच करें कि क्या lesspipeया lessfileपहले से सक्षम है:

echo $LESSOPEN

यदि आपको वहां संदर्भित कोई प्रोग्राम दिखाई नहीं देता है, तो सुनिश्चित करें कि lesspipeइंस्टॉल किया गया है (इसके साथ अधिकांश डिस्ट्रोस आते हैं)।

निम्नलिखित को इसमें जोड़ें ~/.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'

यदि आप नहीं चाहते हैं lesspipe, तो evalकथन को इसके साथ बदलें :

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

सृजन करना ~/.lessfilter

निम्न कोड जोड़ें और फ़ाइल को निष्पादन योग्य बनाएं: 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

इस दृष्टिकोण के बारे में एक कमी यह है कि Py Py Pyon प्रोग्राम एक प्रोग्राम है, और इसलिए शेल सत्र के दौरान पहली बार उपयोग करने पर "कोल्ड स्टार्ट" देरी होती है। इसके बाद के आह्वान बहुत तेजी से होते हैं।
जो कोडर

अच्छा! वास्तव में व्यापक।
दारियो सीडल

4

जीएनयू स्रोत-हाइलाइट का उपयोग करें ; aptयदि आपके पास यह है, तो आप इसे स्थापित कर सकते हैं , या अन्यथा इसे स्रोत से स्थापित कर सकते हैं। फिर कम के लिए "इनपुट प्रीप्रोसेसर" सेट करें, इसके साथ स्थापित करने के लिए सोर्स-हाईलिग 'डॉक्यूमेंटेशन की मदद लें :

यह कॉन्स्टेंटाइन सेरेब्रनी द्वारा सुझाया गया था। स्क्रिप्ट src-hilite-lesspipe.sh को स्रोत-हाइलाइट के साथ एक साथ स्थापित किया जाएगा। आप निम्न पर्यावरण चर का उपयोग कर सकते हैं:

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

इस तरह, जब आप किसी फ़ाइल को ब्राउज़ करने के लिए कम उपयोग करते हैं, अगर यह स्रोत-हाइलाइट द्वारा नियंत्रित एक स्रोत फ़ाइल है, तो यह स्वचालित रूप से हाइलाइट हो जाएगा।

जेवियर-इमैनुएल विंसेंट ने हाल ही में एएनएसआई रंग योजना का एक वैकल्पिक संस्करण प्रदान किया है, esc256.style: कुछ टर्मिनल 256 रंगों को संभाल सकते हैं। ज़ेवियर ने एक स्क्रिप्ट भी प्रदान की, जो यह जांचती है कि आपका टर्मिनल कितने रंगों को संभाल सकता है और मामले में, 256 वेरिएंट का उपयोग करता है। स्क्रिप्ट को source-highlight-esc.sh कहा जाता है और इसे अन्य बायनेरिज़ के साथ एक साथ स्थापित किया जाएगा।


3

किसी अन्य उत्तर पर विस्तार करने के लिए, आप इसे अधिक से अधिक काम कर सकते हैं, यदि आपकी सभी स्क्रिप्ट्स में। Bitfilter फ़ाइल को बस थोड़ा सा बदलकर एक्सटेंशन न हो:

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

आपको अभी भी .bashrc में दो चर जोड़ने होंगे:

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

और आपको अभी भी .lessfilter निष्पादन योग्य बनाने की आवश्यकता होगी:

$ chmod 700 ~/.lessfilter

इसके अलावा, मैं यह जोड़ना चाहता था कि डेबियन के तहत पाइजन पैकेज को पाइथन-पाइसेस कहा जाता है। मुझे पहली बार में इसे पता लगाने में परेशानी हुई क्योंकि "पिगमेंट" के रूप में "पिगमेंट" की स्पष्ट गलत वर्तनी मेरे लिए पर्याप्त संकेत नहीं थी कि यह एक पैकेज था जो पैकेज मैनेजर द्वारा "अजगर-" के साथ उपसर्ग किया जा सकता था।


2
2 टिप्पणियाँ: 1) सुधार के लिए धन्यवाद। 2) वाक्यांश "मतदान का सबसे अच्छा जवाब" जैसे महान नहीं हैं; कि (वास्तव में, अगर यह है कि इसका जवाब से बेहतर है, बदल सकता है इस पोस्ट शीर्ष जवाब हो सकता है, जिस पर यह सिर्फ भ्रमित हो जाएगा हो सकता है कि सिर्फ इतना कहना या "captaincomic का जवाब" "एक और उत्तर उनका विस्तार करना" इशारा करते हैं।?
cpast

2

आप का उपयोग पर विचार कर सकते mostउपयोगिता है जिसके लिए रंग के अनुकूल विकल्प है lessऔर more


क्या आप हमें एक उदाहरण दिखा सकते हैं? मैंने यहाँ कोशिश की, और आउटपुट काला और सफेद था।
डेनिलो

आपके इनपुट में रंग होने चाहिए। पहले एक रंगीन नमूने का उत्पादन करें (उदाहरण के लिए ccze -A </var/log/dpkg.log, ls -1 --color /var/log) फिर इसे पाइप mostकरें ls -1 --color /var/log | most:।
ओथजॉब

हाँ, मैं प्रयोग किया है: git status | less --color,git status | most --color
डेनिलो

मैंने सबसे अधिक, कम, कम इस्तेमाल किया, और सभी उपकरण काले और सफेद दिखाते हैं
डैनिलो

सुनिश्चित करें कि आपके आदेश में या दूसरों को पाइपिंग करने से पहले रंगों का उत्पादन होता lessहै। सुनिश्चित करें कि आपका टर्मिनल एमुलेटर रंगों का उत्पादन कर सकता है। TERMपर्यावरण चर की जाँच करें । Unix.stackexchange.com/questions/148/… में अधिक पढ़ें जब संभव हो तो डेबियन जैसे आधुनिक GNU + लिनक्स वितरण का उपयोग करें । उत्तर खोजने के लिए खोज इंजन (जैसे duckduckgo.com startpage.com ) का उपयोग करें । याद रखें कि टिप्पणियाँ चर्चा के लिए नहीं हैं।
ओथजॉब

2

कम अनुभव में सुधार के बारे में मेरी पूरी ब्लॉग पोस्ट से सघन: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/

रंगीन manpages के लिए, निम्नलिखित को अपने .bashrcया में जोड़ें .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

सिंटैक्स हाइलाइटिंग के लिए, lesspipe.shअपने स्वयं के लेखन के बजाय इसे संभालने के लिए एक मौजूदा शक्तिशाली का उपयोग करके : https://github.com/wofr06/lesslessipe


1

मुझे यह सरल सुरुचिपूर्ण समाधान मिला। आपको कुछ भी अतिरिक्त स्थापित करने की आवश्यकता नहीं है क्योंकि यह पहले से ही अधिकांश मशीनों पर डिफ़ॉल्ट रूप से है। जैसा कि vimज्यादातर मशीनों पर डिफ़ॉल्ट रूप से स्थापित किया गया है, इसे चलाने के लिए किसी मैक्रो शामिल vimकी तरहless

इसका उपयोग करने के लिए कुछ विकल्प एक उपनाम बनाने के लिए हैं: alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

या एक प्रतीकात्मक लिंक बनाएं: ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

फिर तुम बस दौड़ो vless myfile.py

मैं जानकारी के सबसे मिला यहाँ


1
मेरे पास है alias lesser='/usr/share/vim/vim80/macros/less.sh'में ~/bash_aliases(उबंटू 18.04 में)। शॉर्टकट का उपयोग कर सकते हैं जैसे कि एफ फॉरवर्ड, बी बैकवर्ड, डी हाफ डाउन, यू हाफ अप, क्यू लेफ्ट, आदि ...
डैनियल

0

pygmentize
.Bashrc के लिए नीचे की पंक्तियों को जोड़कर मेरे लिए सबसे सहज और सीधे फॉरवर्ड समाधान का उपयोग किया गया था

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

यदि आप कॉल नहीं कर सकते हैं pygmentize, तो बस इंस्टॉल करें

pip install pygments

ps। pygmentizeनिष्पादन बाइनरी में बैठकर /usr/local/bin/या अपने में /home/username/.virtualenv/venvname/bin/या कहीं।


-2

इनमें से कोई भी मेरे लिए बॉक्स से बाहर काम नहीं कर रहा था और मुझे यह काम करने का एक आसान तरीका सूझा। इसलिए मुझे लगा कि मैं इसे साझा करूंगा।

बस tmux का उपयोग करें, जो आपको बड़े इतिहास के माध्यम से एक्सेस और स्क्रॉल करने की अनुमति देता है और रंगों को पूरी तरह से संरक्षित करता है।


1
क्या एक स्क्रीन से कई टर्मिनलों की अनुमति नहीं है, यह रंगों के प्रदर्शन को कम कैसे बदलता है?
Xen2050

@ Xen2050 मुझे लगता है कि यह एक साफ-सुथरा काम है, हालांकि यह जवाब नहीं बताता है कि स्क्रॉल मोड (Ctrl-b + [) दर्ज कैसे करें
सिमिकामीका

-2

जब तक आउटपुट टेक्स्ट में कलर कंट्रोल कैरेक्टर less -Rहोंगे , तब तक करेंगे।


यह एक और जवाब है (9 साल पहले से)। अन्य उत्तरों की नकल करने वाले उत्तर उपयोगी नहीं हैं।
कामिल मैकियोरोस्की

उचित, लेकिन यह जवाब स्पष्ट नहीं करता है कि यह केवल उन फ़ाइलों पर काम करता है जो रंग नियंत्रण वर्णों के साथ बनाए गए थे।
लियोनार्डो राले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.