सवाल कम या ज्यादा रंग प्राप्त करें


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


356
2018-03-09 10:44


मूल


यह संबंधित लगता है: superuser.com/questions/36022/less-and-grep-color - क्या इसने सहायता की? - Jonik


जवाब:


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

इंस्टॉल करें pygments आपके पैकेज मैनेजर या पीपी के साथ (संभवतः कहा जाता है python-pygments) या इसे यहाँ प्राप्त करें http://pygments.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"
        ;;
    *)
        grep "#\!/bin/bash" "$1" > /dev/null
        if [ "$?" -eq "0" ]; 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

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

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


133
2017-09-20 03:29



यदि आप स्रोत कोड फ़ाइलों का रंग रखना चाहते हैं, तो आपको चलने से ~ / .lessfilter निष्पादन योग्य बनाने की भी आवश्यकता है chmod u+x ~/.lessfilter। आपको pygmentize भी होना चाहिए (pygments.org/download) स्थापित। - Sergiy Byelozyorov
क्या कोई पुष्टि कर सकता है कि यह काम करता है क्योंकि जब मैं कमांड निष्पादित करता हूं तो इसका मेरे लिए कोई प्रभाव नहीं पड़ता है ls -l | less - puk
व्लादिमीर Linek के Lessopen.sh के साथ यह कैसे चेन करने के लिए कोई विचार है ?? यह इस फ़ॉर्म के साथ सेटअप है: LESSOPEN = "lessopen.sh% s" - Gregory
@puk आप कुछ ऐसा कर सकते हैं ls --color=always -l | less -R। स्पष्ट रूप से टाइप करने के लिए बहुत कुछ है लेकिन आप इसे कुछ ऐसा करने के लिए उपनाम कर सकते हैं ll। ऐसा है कि आप किसी भी अतिरिक्त पुस्तकालयों का उपयोग नहीं करना चाहते हैं। - PhilT
उत्तर में @ SergiyByelozyorov की टिप्पणी जोड़ा गया। - andrybak


निम्नलिखित आज़माएं:

less -R

से man less:

-r या --raw-control-chars

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

-R या --RAW-CONTROL-CHARS

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


422
2018-03-09 10:48



यह तब उपयोगी होता है जब फ़ाइल में स्वयं से बचने वाले कोड होते हैं जिन्हें प्रदर्शित करने की आवश्यकता होगी। - Nitrodist
मुझे कम-से-कम पता था लेकिन गलत लाइनों को लाने में "/" का उपयोग करके फ़ाइल में खोज करना था। -R एक बेहतर काम करने लगता है। पारितोषिक के लिए धन्यवाद। - Amos Shapira
यह ध्यान दिया जाना चाहिए कि अधिकांश कार्यक्रमों का उपयोग किया जाता है isatty(2) यह जांचने के लिए syscall कि उनके मानक आउटपुट एक टर्मिनल है, और आमतौर पर रंगीन आउटपुट को अक्षम करते हैं यदि यह नहीं है। कम से कम किसी भी पाइप के लिए, isatty0 लौटाएगा यह जांचने के लिए कि यह काम करता है, कोशिश करें echo -e '\x1b[32;1mtest\x1b[m' | less -r - mic_e
यह जवाब वास्तव में कुछ परीक्षण करने में उत्कृष्ट नहीं है। - Michael Wolf
आप भी टाइप कर सकते हैं -R जब आप पहले ही खोले हैं less इसे पाने के लिये। - Scz


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

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

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

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

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


118
2018-04-27 04:19



अच्छा धन्यवाद। सिवाय इसके कि मुझे उपयोग करने की ज़रूरत है -R एक विकल्प के रूप में less, भी। - naught101
मेरा मानना ​​है grep -R रिकर्सिव खोज निर्दिष्ट करने के लिए है। less -R के लिए जरूरी है less रंगों को वापस सही ढंग से थूकने के लिए। grep --color=always [grep cmds] | less -R ओएस एक्स 10.7.3 पर मेरे लिए काम करता है! - Steven Lu
@ naught101 @Steven Lu संपादित किया गया, हालांकि ऐसा लगता है कि कुछ लोगों को उपयोग करने की आवश्यकता नहीं है less -R (मूल पोस्ट के लेखक के अनुसार, वैसे भी)। - jtpereyda
क्या grep को सिर्फ पाइप कम-आर कमांड को जानने के लिए और फिर रंग करना है? इसलिए, हमें हर समय --color = हमेशा और कम-आरआर डालना नहीं है। - A-letubby
यह अब तक का सबसे आसान कामकाजी उत्तर है। धन्यवाद! - Danny Staple


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

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

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


29
2017-09-24 09:50



बड़ी फाइलों के प्रदर्शन के बारे में कैसे? विम सिंटैक्स हाइलाइटिंग बड़ी फाइलों पर धीमी होने के बारे में जानती है। - pihentagy
मुझे नहीं पता कि 'बड़ा' के लिए आपका क्या मूल्य है, लेकिन ~ 10000 लाइनों की फाइल खोलना तात्कालिक है, अंदर खोज करें। - Riccardo Galli
मैं उलझा हुआ (मुझे नहीं पता था view) लेकिन एक और नकारात्मक बात यह है कि एक कर्सर होने के बाद जे / के / ऊपर / नीचे तुरंत स्क्रॉल नहीं होता है। - Tyler Collier
ध्यान दें कि आपको जोड़ने की आवश्यकता हो सकती है view - जब पाइपिंग - user45909
vim एक संपादक है, जो पूरी फ़ाइल को स्मृति में लोड करता है, जबकि less एक पेजर है, फ़ाइल को केवल आंशिक रूप से स्मृति में लोड कर रहा है। आप विशाल फाइलों के साथ अंतर जानेंगे। - sjas


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

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

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

12
2018-03-12 07:17



संक्षिप्त और प्रभावी। मैं उपनाम को परिभाषित करना पसंद करता हूं, क्योंकि कभी-कभी कम बेहतर होता है। तो: उपनाम lesc = 'कम = "- आर" LESSOPEN = "| pygmentize -g% s" कम' - Tiago


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

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

pygmentize file.cpp | less

या

pygmentize file.cpp | more

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

यह बहुत तेज़ है। अगर आपको फायरिंग नहीं लगता है vim केवल पढ़ने-योग्य मोड है जो आपको सिंटैक्स हाइलाइटिंग दे सकता है यदि आपके पास है vim

view file.cpp

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


9
2018-03-09 13:30





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

less -R

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

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

unbuffer <command> | less -R

Pacman का उपयोग उदाहरण

unbuffer pacman -Ss firefox | less -R

unbuffer आदेश आमतौर पर का हिस्सा है expect-dev (डेबियन / उबंटू) या expect(आर्क लिनक्स) पैकेज।

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

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

pygmentize someSource.cpp | less -R

8
2017-10-08 10:37





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

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

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

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

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


3
2018-05-25 19:52





किसी अन्य उत्तर पर विस्तार करने के लिए, यदि आप अपनी सभी स्क्रिप्ट्स में नहीं हैं, तो आप इसे अधिकतर के लिए काम कर सकते हैं जिसमें .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"
        ;;
    *)
        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

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


3
2018-02-27 22:45



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