Как мне выделить изменения CVS в Emacs?

Я использую emacs с cvs, и у меня включен режим cvs. Я хотел бы получить построчное выделение изменений из последней версии в CVS. Я видел это в intellij, где есть зеленая индикация для добавленных строк и еще одна индикация для измененных строк и третий символ для удаленных строк.

Есть ли режим выделения cvs для emacs, чтобы показать изменения по сравнению с последней версией cvs? Я ищу не функциональность типа cvs diff, которая открылась бы в новом буфере, а что-то, что указывало бы в моем текущем буфере, какие строки были изменены.

На следующем изображении есть синий прямоугольник с левой стороны в том, что Intellij называет «желобом», чтобы указать, что код отличается от того, что находится в системе управления версиями.

intellij example
(источник: jetbrains.com)

Я ищу аналогичную функциональность в emacs.


person Alex B    schedule 25.02.2009    source источник
comment
пожалуйста, s / cvs / vcs, чтобы мы получили ответ на любой git / bzr / hg / svn ...   -  person elmarco    schedule 26.02.2009


Ответы (4)


Теперь вы можете проверить diff-hl, который обеспечивает выделение левой границы окна.

Пока я тестировал его только на нескольких современных DVCS, но если вы все еще используете CVS, и он тоже не работает, сообщите о проблеме.

person Dmitry    schedule 26.06.2012

Вот еще один ответ, который тоже не делает того, что вы хотите, но может быть полезен.

C-x v g 

запускает команду vc-annotate.

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

Конечно, встроенная версия vc-annotate не прокручивает буфер должным образом, поэтому вам понадобится этот совет:

(defadvice vc-annotate (around vc-annotate-and-scroll)
  "scroll buffer to view current line in the annotated buffer"
  (let ((pos (count-lines (point-min) (point))))
    ad-do-it
    (let ((orig-window (selected-window))
          (window (other-window-for-scrolling)))
      (select-window window)
      (goto-line pos)
      (select-window orig-window))))

(ad-activate 'vc-annotate)
person Trey Jackson    schedule 26.02.2009
comment
По крайней мере, для меня это было полезно :) - person claf; 12.02.2014

Вам нужен vc-diff, который по умолчанию включен C-x v =. Это дает вам необработанный вывод diff во временном буфере. Буфер использует diff-режим, в котором есть несколько изящных уловок ... например, вы можете использовать C-c C-e, чтобы применить diff как патч к другому файлу. Используйте describe-mode (по умолчанию C-h m) в буфере различий, чтобы найти другие уловки.

person Derek Slager    schedule 26.02.2009

Возможно, вам нужен Ediff, который, похоже, работает именно так что вы хотите.

person dwc    schedule 25.02.2009
comment
Не совсем то, что я ищу. Мне нужен второстепенный режим, чтобы он всегда мог быть включен при редактировании кода. Я также хочу напрямую сравнить с CVS, не получая вторую локальную копию исходной версии. - person Alex B; 26.02.2009
comment
Как с этим справляется IntelliJ? Похоже, то, о чем вы просите, ужасно дорого ... - person dwc; 26.02.2009