Раскраска пробелов в выводе git-diff

151

Что касается форматирования кода, я немного пурист :). Я очень часто удаляю ненужные пробелы (строки только с w, w в конце строк и т. Д.). Я даже установил vim, чтобы показать такие линии, окрашенные в красный цвет.

Моя проблема в том, что с помощью git-diff я часто вижу что-то вроде этого:

-      else{ 
+      else{

Даже если у меня цвет git-diff, я не вижу разницы (в этой конкретной ситуации я убрал 1 ws в конце строки). Есть ли какой-нибудь способ сказать git-diff, чтобы он показывал, что он окрашен в красный? (например, те, которые соответствуют / \ s + $ / regexp).

radarek
источник
4
Если вы инвертируете цвета (поменяйте местами передний план и фон), появятся пробелы, как показано ниже. Самый простой способ сделать это во многих терминалах - выделить нужный текст мышью. Конечно, этот трюк работает только с цветным дифференциалом.
Phlarx

Ответы:

172

Вам может потребоваться установить параметр конфигурации color.diff.whitespace, например, с помощью:

 git config color.diff.whitespace "red reverse"

(Я предполагаю, что у вас уже есть color.diffили color.uiустановлено, autoтак как вы говорите, что вы видите цветные пятна в git diffлюбом случае.)

Если вы хотите точно настроить тип ошибок пробелов, которые выделены красным цветом, вы можете изменить их core.whitespace, но они blank-at-eolвключены по умолчанию, поэтому вам, вероятно, не придется менять это для примера, который вы упомянули.

Возможный источник путаницы заключается в том, что в выходных данных git diffошибки пробелов выделяются только во введенных строках, а не в удаленных. ( Обновление: как указывает Пол Уиттекер в своем ответе , который вы должны проголосовать с повышением :), вы можете увидеть это, изменив смысл различий с помощью git diff -R.)

Вы можете найти больше документации по этим параметрам конфигурации на странице руководства git config.

Если вы не хотите использовать -Rkludge, вы можете использовать опцию WhiteSpace Error Highlight со страницы руководства diff .

--ws-ошибок изюминка =

Выделите ошибки пробелов в строках, указанных цветом, указанным в color.diff.whitespace. разделенный запятыми список старого, нового контекста Если эта опция не указана, подсвечиваются только пробельные символы в новых строках. Например, --ws-error-highlight = new, old выделяет ошибки пробелов как в удаленных, так и в добавленных строках. все может быть использовано как сокращение для старого, нового контекста.

git diff --ws-error-highlight=new,old <file>

или

git diff --ws-error-highlight=all <file>

Я не знаю способ навсегда включить это и сохранить это в конфигурации, кроме использования псевдонима:

git config alias.df 'diff --ws-error-highlight=all'

Теперь вы можете использовать:

git df <file>

Чтобы увидеть изменения в красном.

Обратите внимание, что в Git 2.11 (Q4 2016) этот псевдоним может быть заменен следующим:

git config diff.wsErrorHighlight all

Смотрите документ дальшеgit diff и дальшеgit config .

Марк Лонгэйр
источник
34
«Возможный источник путаницы заключается в том, что в выходных данных git diff ошибки пробелов выделяются только во введенных строках, а не в удаленных». Именно! И нет возможности показать это также для удаленных строк? (эй, это
отличное
6
Добавьте --global, чтобы установить в ~ / .gitconfig
simlmx
17
@radarek: вы можете использовать обратный вариант:git diff -R
синеватый
6
Есть ли сообщение об ошибке для этого? Если нет, то кажется, что должно быть.
Ajedi32
3
это сработало git config diff.wsErrorHighlight all. Используйте, git config --global [...]чтобы сделать изменения глобальными (т.е. повлиять на все репо).
Фелипе Альварес
141

Используйте, git diff -Rчтобы превратить удаленные строки в добавленные строки. Затем конечные пробелы будут выделены.

(Это предполагает, что у вас уже включена подсветка пробелов в соответствии с настройками цвета из ответа Марка. Кредит для этого метода идет в пост Junio ​​по адресу http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal- with-git-diff-td5653205.html .)

Например, при преобразовании файла из концов строки DOS в Unix git diff -Rчетко отображаются ^Mсимволы (dis), появляющиеся на концах строк. Без -R(а также без -wи т.д.) показывает, что весь файл изменился, но не показывает, как.

Пол Уиттакер
источник
4
Конечно, вы также можете это сделать, git diff | cat -A | less -Sесли вы в отчаянии, но в дополнение к возврату каретки в нем catтакже будут буквально отображаться любые коды выхода с подсветкой.
Пол Уиттакер
3
@Paul_Whittaker cat -Aне переносимый. На кошке BSD такой опции нет. Пожалуйста, используйте cat -vetвместо этого.
7heo.tk
9

Использование git diff --color | less -R. Это -Rделает коды управления цветом удобными для человека.

Тогда вы можете использовать lessпоиск по регулярному выражению, например,

/[[:space:]]+$
кельвин
источник
Это регулярное выражение также работает vim, кстати.
Хосе Албан
Эта последняя идея less -Rпросто облегчила мне ls --colorпрохождение less.
Менахем
0

Моя версия git diffуже, кажется, делает это - я установил git 1.7.4.1 color.ui = auto.

nickgrim
источник
12
Я только что протестировал git 1.7.5.1, и он определенно не выделяет конечные пробелы в удаляемых строках.
Инфильтратор