command-line - कमांड लाइन पर diff रंग कैसे करें?




colors (9)

जब मेरे पास एक अंतर होता है, तो मैं इसे कैसे रंग सकता हूं ताकि यह अच्छा लगे? मैं इसे कमांड लाइन के लिए चाहता हूं, इसलिए कृपया कोई जीयूआई समाधान न करें।


Answers

diff लिए मैन पेज अपने आप से रंगीनकरण के लिए कोई समाधान नहीं सुझाते हैं। कृपया colordiff का उपयोग करने पर विचार करें। यह डिफ के चारों ओर एक रैपर है जो समान आउटपुट को diff के रूप में उत्पन्न करता है, सिवाय इसके कि यह रंगीन वाक्यविन्यास का उपयोग करके आउटपुट को बढ़ाता है ताकि पठनीयता में वृद्धि हो सके:

diff old new | colordiff

या केवल:

colordiff old new

स्थापना:

  • उबंटू / डेबियन: sudo apt-get install colordiff
  • ओएस एक्स: brew install colordiff या port install colordiff

मैं grc (जेनेरिक कलरिसर) का उपयोग करता हूं, जो आपको diff सहित कई कमांड के आउटपुट को रंगने की अनुमति देता है।

यह एक अजगर लिपि है जिसे किसी भी कमांड के चारों ओर लपेटा जा सकता है। तो diff file1 file2 का आविष्कार करने के बजाय, आप रंगीन आउटपुट देखने के लिए grc diff file1 file2 का आह्वान करेंगे। मैं इसे आसान बनाने के लिए grc diff लिए aliased diff है।


रंगीन, शब्द-स्तर diff ouput

नीचे दी गई स्क्रिप्ट और diff-highlight साथ आप क्या कर सकते हैं:

#!/bin/sh -eu

# Use diff-highlight to show word-level differences

diff -U3 --minimal "[email protected]" |
  sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;[email protected]/;s/$/\x1b[0m/' |
  diff-highlight

( Sedlighting के लिए @ retracile के जवाब के लिए क्रेडिट)


diff --color --color विकल्प जीएनयू diffutils 3.4 (2016-08-08) में जोड़ा गया था

यह अधिकांश distros पर डिफ़ॉल्ट diff कार्यान्वयन है, जो जल्द ही इसे प्राप्त हो जाएगा।

3.5 पर ऐसा लगता है:

साथ में:

diff --color -u \
  <(seq 6 | sed 's/$/ a/') \
  <(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')

स्पष्ट रूप से प्रतिबद्ध c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (मार्च 2015) में जोड़ा गया।

मैंने वर्ड लेवल डिफ को भी diff-highlight से अनुरोध किया है: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html


Vim प्रयोग करें:

diff /path/to/a /path/to/b | vim -R -

या बेहतर अभी भी, VimDiff (या vim -d , जो कि टाइप करने के लिए छोटा है) दो, तीन या चार फ़ाइलों के बीच अंतर दिखाएगा।

उदाहरण:

vim -d /path/to/[ab]
vimdiff file1 file2 file3 file4

आप colordiff का उपयोग करने के लिए subversion कॉन्फ़िगरेशन बदल सकते हैं

~ / .subversion / config.diff

 ### Set diff-cmd to the absolute path of your 'diff' program.
 ###   This will override the compile-time default, which is to use
 ###   Subversion's internal diff implementation.
-# diff-cmd = diff_program (diff, gdiff, etc.)
+diff-cmd = colordiff

के माध्यम से: https://gist.github.com/westonruter/846524


असल में एक और विकल्प प्रतीत होता है (जिसे मैंने हाल ही में देखा है, ऊपर वर्णित समस्या में चलते समय):

git diff <file1> <file2>

यदि आपके पास गिट है (जो आप पहले से ही किसी भी तरह से उपयोग कर रहे हैं), तो आप इसे तुलना के लिए उपयोग करने में सक्षम होंगे, भले ही फाइलें संस्करण नियंत्रण में न हों। यदि डिफ़ॉल्ट रूप से आपके लिए सक्षम नहीं है, तो यहां कलर सपोर्ट सक्षम करने से पहले उल्लेख किए गए कुछ कामकाजों की तुलना में काफी आसान लगता है।


और उन अवसरों के लिए जब एक yum install colordiff या एक apt-get install colordiff आपके तत्काल नियंत्रण से परे कुछ पागल बाधा के कारण एक विकल्प नहीं है, या आप सिर्फ पागल महसूस कर रहे हैं , तो आप पहिया को फिर से आविष्कार कर सकते हैं :

sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[[email protected]/;s/$/\x1b[0m/'

एक शेल स्क्रिप्ट और पाइप में इसके माध्यम से एकीकृत diff आउटपुट में फेंको।

यह हंक मार्करों को नीला बनाता है और क्रमशः हरे और लाल पृष्ठभूमि में जोड़े गए / हटाए गए लाइनों को नए / पुराने फ़ाइल नामों और हाइलाइट करता है। 1 और यह पीछे की जगह 2 को कॉलर्डिफ़ के मुकाबले ज्यादा आसानी से स्पष्ट कर देगा।

1 संयोग से, संशोधित लाइनों के समान फ़ाइल नामों को हाइलाइट करने का कारण यह है कि फ़ाइल नामों और संशोधित लाइनों के बीच सही ढंग से अंतर करने के लिए डिफ प्रारूप को सही ढंग से पार्स करना आवश्यक है, जो रेगेक्स से निपटने के लिए कुछ नहीं है। उन्हें वही काम "हाइलाइट" के समान काम करता है और समस्या को तुच्छ बनाता है। उस ने कहा, कुछ दिलचस्प subtleties हैं

2 लेकिन टैब पीछे नहीं है। जाहिर है टैब कम से कम मेरे xterm में, अपने पृष्ठभूमि सेट नहीं मिलता है। यह टैब बनाम अंतरिक्ष परिवर्तन थोड़ा सा खड़ा करता है हालांकि।


रंग हेक्साडेसिमल नोटेशन निम्न जैसा है: #AARRGGBB

  • ए: अल्फा
  • आर: लाल
  • जी: हरा
  • बी: नीला

आपको सबसे पहले देखना चाहिए कि hexadecimal कैसे काम करता है। आप ज्यादातर एफएफ में लिख सकते हैं।







command-line colors diff