Как раскрасить diff в командной строке?

Вот как я мог бы это сделать, если вы можете использовать Perl 5.10.

qr/
  (?
    (?:
      [^=,\\]
    |
      (?&escape)
    )++ # Prevent null keys
  )

  \s*+
  =
  \s*+

  (?
    (?"ed)
  |
    (?:
      [^=,\s\\]
    |
      (?&escape)
    )++ # Prevent null value ( use quotes for that )
  )

  (?(DEFINE)
    (?\\.)
    (?
      "
        (?:
          (?&escaped)
        |
          [^"\\]
        )*+
      "
    )
  )
/x

Доступ к элементам можно получить через %+.

perlretut очень помог в создании этого ответа.

449
задан daniel kullmann 11 July 2018 в 13:15
поделиться

5 ответов

На самом деле, кажется, есть еще один вариант (который я заметил недавно, когда столкнулся с проблемой, описанной выше):

git diff --no-index <file1> <file2>
# output to console instead of opening a pager
git --no-pager diff --no-index <file1> <file2>

Если у вас есть Git (который вы уже могли использовать в любом случае) Тогда вы сможете использовать его для сравнения, даже если сами файлы не находятся под контролем версий. Если по умолчанию эта функция не включена для вас, то включение поддержки цвета здесь, по-видимому, будет значительно проще, чем некоторые из ранее упомянутых обходных путей.

159
ответ дан Trevor Boyd Smith 11 July 2018 в 13:15
поделиться

Я использую grc (Generic Colouriser), который позволяет раскрасить вывод ряда команд, включая diff.

Это скрипт на python, который можно обернуть вокруг любой команды. Таким образом, вместо вызова diff file1 file2, вы бы вызывали grc diff file1 file2 для просмотра цветного вывода. Я добавил псевдонимы diff - grc diff, чтобы было легче.

10
ответ дан dogbane 11 July 2018 в 13:15
поделиться

Поскольку wdiff принимает аргументы, указывающие строку в начале и конце как вставок, так и удалений, вы можете использовать цветовые последовательности ANSI в качестве этих строк:

wdiff -n -w  

Например, это вывод сравнение двух файлов CSV:

diff output of CSV files

Пример из https://www.gnu.org/software/wdiff/manual/ html_node / wdiff-Examples.html

\033[30;41m' -x

Например, это вывод сравнение двух файлов CSV:

diff output of CSV files

Пример из https://www.gnu.org/software/wdiff/manual/ html_node / wdiff-Examples.html

\033[0m' -y

Например, это вывод сравнение двух файлов CSV:

diff output of CSV files

Пример из https://www.gnu.org/software/wdiff/manual/ html_node / wdiff-Examples.html

\033[30;42m' -z

Например, это вывод сравнение двух файлов CSV:

diff output of CSV files

Пример из https://www.gnu.org/software/wdiff/manual/ html_node / wdiff-Examples.html

\033[0m' file1 file2

Например, это вывод сравнение двух файлов CSV:

diff output of CSV files

Пример из https://www.gnu.org/software/wdiff/manual/ html_node / wdiff-Examples.html

5
ответ дан wjandrea 11 July 2018 в 13:15
поделиться

На последних версиях мерзавца на Ubuntu можно включить выделение разности с:

sudo ln -s /usr/share/doc/git/contrib/diff-highlight/diff-highlight /usr/local/bin
sudo chmod a+x /usr/share/doc/git/contrib/diff-highlight/diff-highlight

И затем добавляющий это к Вашему .gitconfig:

[pager]
    log = diff-highlight | less
    show = diff-highlight | less
    diff = diff-highlight | less

возможно, что сценарий расположен где-то в другом месте в других дистрибутивах, можно использовать locate diff-highlight для обнаружения где.

0
ответ дан 22 November 2019 в 22:49
поделиться

С в летучая мышь команда:

diff file1 file2 | bat -l diff
1
ответ дан 22 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: