Есть ли режим Emacs, который выделяет отличия от принятой версии?

31

Одна из особенностей XCode, которая, на мой взгляд, довольно изящна, - это режим «Сравнение», который постоянно показывает различия между текущим буфером и самым последним коммитом.

Режим сравнения

Есть ли что-нибудь подобное для Emacs? Я действительно не забочусь об одновременных взглядах рядом. Простое выделение фона любых линий, которые были изменены, очень помогло бы.

Я знаю, что всегда могу C-x v =, но это статический вид на один момент времени, и показывает только различия. Я хочу увидеть весь мой файл, доступный для редактирования, с выделением различий.

кругозор
источник

Ответы:

30

В библиотеке diff-hl Дмитрия Гутова есть diff-hl-modeвыделение полосы, показанное в верхнем окне на следующем снимке экрана (с реальным различием, отображаемым в нижнем окне для сравнения):

скриншот diff-hl

Он использует универсальную vcфункциональность в Emacs, чтобы быть независимым от VCS. В файле readme написано: «Протестировано с Git, Mercurial, Bazaar и SVN. Может работать и с другими бэкэндами VC».

Обратите внимание, что это diff-hl-margin-modeможет быть использовано, если вы используете терминальный Emacs, а не графический интерфейс Emacs.

По умолчанию diff-hlвыделяются только различия между сохраненным файлом и хранилищем; но diff-hl-flydiff-modeпозволяет также выделить несохраненные различия, чтобы вы могли видеть изменения во время редактирования.

Также обратите внимание на встроенный (в стандартный Emacs) highlight-changes-mode. Это на самом деле не решает вашу проблему «из коробки», но highlight-compare-*функции могут облегчить решение.

Phils
источник
№ 33 было решено.
Дмитрий
1
Дмитрий: Действительно - я действительно пробовал это в течение последних нескольких дней, и я могу подтвердить, что эта функция работает очень хорошо :)
phils
Я рад это слышать; это было написано одним очень терпеливым вкладчиком. Спасибо за обновление ответа!
Дмитрий
10

Вы не указываете, какую систему контроля версий вы используете, но если это git, вы можете использовать git-gutter, чтобы поместить индикатор на полях, когда строка добавлена, удалена или изменена. Это доступно в MELPA через M-x package-install git-gutter.

erikstokes
источник
Это выглядит довольно близко к тому, что я представлял, но похоже, что он обновляет желоб только при сохранении буфера. Интересно, как трудно было бы интегрироваться с (или как-то иначе вести себя как) мухобойкой ...
Кен,
10

Вы должны проверить Эдифф . Он может отображать различия и действовать как (трехсторонний) инструмент слияния. Это позволяет вам легко отменить изменения, а также выделяет уточненные различия, чтобы показать вам только те части каждого блока, которые действительно изменились.

скриншот ediff

ediff-revision позволит вам легко сравнить с последним коммитом или любыми предыдущими коммитами.

Лили Чунг
источник