Когда у меня есть различия, как я могу раскрасить их так, чтобы они хорошо выглядели? Я хочу это для командной строки, поэтому, пожалуйста, никаких решений с графическим интерфейсом.
unix
command-line
colors
diff
Даниэль Куллманн
источник
источник
Ответы:
Страницы руководства для
diff
предлагают не решение для раскрашивания изнутри себя. Пожалуйста, подумайте об использованииcolordiff
. Это оболочка,diff
которая выдает тот же вывод, что и diff, за исключением того, что она увеличивает вывод, используя цветную подсветку синтаксиса для повышения читабельности:или просто:
Установка:
sudo apt-get install colordiff
brew install colordiff
илиport install colordiff
источник
less -R
, который правильно отображает escape-последовательности для цветов.-y
опция включена ) belowvimdiff
Предложение ниже, вероятно, лучший способcolordiff
хорошо работаетsvn diff | colordiff
(например, в ситуациях, когда у вас есть только diff, а не два файла diffd).-y
).Используйте Vim :
Или, что еще лучше, VimDiff (или
vim -d
, что короче, чтобы печатать) будет показывать различия между двумя, тремя или четырьмя файлами рядом.Примеры:
источник
ctrl-c
иctrl-x
для других целей в Vim.ctrl-q
захвачено многими терминалами. См. Написание и выход, чтобы найти способ, который наилучшим образом соответствует вашим потребностям.zsh
? Я не узнаю=(...)
конструкт. Во-вторых, я имелdiff -ur a b
в виду.=(...)
заменяется именем файла, содержащего ее вывод.На самом деле, кажется, есть еще один вариант (который я заметил недавно, когда столкнулся с проблемой, описанной выше):
Если у вас есть Git (который вы уже используете), вы сможете использовать его для сравнения, даже если сами файлы не находятся под контролем версий. Если по умолчанию эта функция не включена для вас, то включение поддержки цвета здесь, по-видимому, будет значительно проще, чем некоторые из ранее упомянутых обходных путей.
источник
git diff <(xxd file1) <(xxd filed)
не работает.git help diff
. Так что, если ваш git diff пуст, попробуйтеcd
выйти туда, где вы находитесь.git config color.diff auto
git diff --no-index
для сравнения двух файлов.diff --color
опция была добавлена в GNU diffutils 3.4 (2016-08-08)Это
diff
реализация по умолчанию на большинстве дистрибутивов, которые скоро получат ее.Ubuntu 18.04 имеет
diffutils
3,6 и, следовательно, имеет его.На 3.5 это выглядит так:
Проверено:
По-видимому, добавлено в коммит c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (март 2015).
Различия на уровне слов
Как
diff-highlight
. Не представляется возможным, запрос функции: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.htmlСвязанные темы:
ydiff
хотя, смотрите ниже.ydiff
параллельный уровень слова diffhttps://github.com/ymattw/ydiff
Это Нирвана?
Результат:
Если линии слишком узкие (по умолчанию 80 столбцов), поместите их на экран с помощью:
Содержание тестовых файлов:
a
б
ydiff
Git интеграцияydiff
интегрируется с Git без какой-либо настройки.Внутри Git-репозитория вместо этого
git diff
вы можете сделать просто:и вместо
git log
:Смотрите также: Как я могу получить разностное сравнение, когда я делаю "git diff"?
Протестировано на Ubuntu 16.04, git 2.18.0, ydiff 1.1.
источник
There is no word-highlighting, yet
- есть обновления? Это то, для чего я пришел к этому вопросу (я хочу получитьgrep --color
аналогичный вывод).git diff --color
тоже работает. Полезно при работе над ssh.diff --color=always | less -R
И в тех случаях, когда
yum install colordiff
или илиapt-get install colordiff
не вариант из-за какого-то безумного ограничения вне вашего непосредственного контроля, или вы просто чувствуете себя сумасшедшим , вы можете заново изобрести колесо с помощью строки sed:Добавьте это в сценарий оболочки и передайте через него унифицированный вывод diff .
Он делает маркеры фрагментов синим цветом и выделяет новые / старые имена файлов и добавленные / удаленные строки на зеленом и красном фоне соответственно. 1 И это сделает изменения в конце 2 более заметными, чем может сделать colordiff.
1 Кстати, причина для выделения имен файлов , так же , как модифицированные линии является то , что правильно различать имена файлов и модифицированные строки требует правильно разбор формата различия, который не является чем - то решать с регулярным выражением. Выделение их одинаково работает «достаточно хорошо» визуально и делает задачу тривиальной. Тем не менее, есть некоторые интересные тонкости .
2 Но не конечные вкладки. Видимо вкладки не получают фоновый набор, по крайней мере, в моем xterm. Это делает изменения табуляции и пространства немного выделяющимися.
источник
sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"
(хотя я ожидаю, что есть лучший способ).Вы можете изменить конфигурацию Subversion для использования Colordiff
~ / .Subversion / config.diff
через: https://gist.github.com/westonruter/846524
источник
Цветной вывод на уровне слов
diff
Вот что вы можете сделать с помощью приведенного ниже сценария и diff-highlight :
( Благодарим за ответ @ retracile за
sed
выделение)источник
vim
, используйте плагин, например, diffchar .я использую
grc
(Generic Colouriser), который позволяет раскрасить вывод ряда команд, в том числеdiff
.Это скрипт на python, который можно обернуть вокруг любой команды. Таким образом, вместо того
diff file1 file2
, чтобы вызывать, вы бы вызывали,grc diff file1 file2
чтобы увидеть цветной вывод. Я псевдонимы ,diff
чтобыgrc diff
сделать его проще.источник
fork()
вызовов, хотя, скорее всего, будет работать с WSL.Вот еще одно решение , которое вызывает
sed
вставить соответствующие последовательности ANSI спасая цвета , чтобы показать+
,-
и@
линию в красном, зеленый и голубой, соответственно.В отличие от других решений этого вопроса, в этом решении явно не указаны escape-последовательности ANSI. Вместо этого он вызывает
tput setaf
иtput sgr0
команды для генерации последовательностей ANSI побега для установки соответствующего цвета и сброса атрибутов терминала, соответственно.Чтобы увидеть доступные цвета для каждого аргумента
tput setaf
, используйте эту команду:Вот как выглядит результат:
Вот доказательство того , что
tput setaf
иtput sgr0
команды генерируют соответствующие управляющие последовательности ANSI:источник
Так как
wdiff
принимает аргументы, указывающие строку в начале и конце как вставок, так и удалений, вы можете использовать цветовые последовательности ANSI в качестве этих строк:Например, это результат сравнения двух CSV-файлов:
Пример из https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html
источник
colordiff
Теперь (1.0.16) понимаетwdiff
, так что вы можете просто труба:wdiff -n f1 f2 | colordiff
.wdiff
должны быть объединены в diffutils ...Я бы посоветовал вам сделать разницу попробовать . Я использую его во время своей работы, и сейчас он кажется великолепным. Он поставляется с множеством опций, и вам действительно легко настроить ваши различия так, как вы хотите.
Вы можете установить его:
или на Mac:
После этого вы можете выделить свои различия следующим образом:
источник
С командой летучей мыши :
источник
В последних версиях git на Ubuntu вы можете включить подсветку diff с помощью:
И затем добавив это к вашему
.gitconfig
:Возможно, скрипт находится где-то еще в других дистрибутивах, вы можете использовать,
locate diff-highlight
чтобы узнать где.источник
Различия цвета на уровне персонажа: Установите ccdiff
источник