是否有Emacs模式突出显示与已提交版本的差异?


31

Xcode具有的一个我认为很不错的功能是“比较”模式,该模式连续显示当前缓冲区和最新提交之间的差异。

比较模式

Emacs有这样的东西吗?我不太在乎同时的并排视图。仅突出显示已更改的任何行的背景将有很大的帮助。

我知道我总是可以做到的C-x v =,但这是一个时间点的静态视图,仅显示差异。我想查看我的整个文件,可编辑,突出显示差异。

Answers:


30

Dmitry Gutov的diff-hl库提供了diff-hl-mode,可以在以下屏幕截图的顶部窗口中显示边缘突出显示(实际的diff显示在底部窗口中以进行比较):

diff-hl屏幕截图

它使用vcEmacs中的通用功能来与VCS无关。自述文件说:“经过Git,Mercurial,Bazaar和SVN的测试。也可以与其他VC后端一起使用。”

请注意,diff-hl-margin-mode如果您使用的是终端Emacs而不是GUI Emacs ,则可以使用它。

默认情况下,diff-hl仅突出显示已保存文件和存储库之间的差异;但是还diff-hl-flydiff-mode可以突出显示未保存的差异,以便在编辑时可以看到更改。

另请注意内置(标准Emacs)highlight-changes-mode。这并不能真正解决您的问题,但是这些highlight-compare-*功能可能有助于解决方案。


#33已解决。
德米特里(Dmitry)

1
德米特里(Dmitry):确实-过去几天我实际上一直在进行尝试,我可以确认此功能非常有效:)
phils

我很高兴听到它;它是由一位非常耐心的贡献者撰写的。感谢您更新答案!
德米特里(Dmitry)

10

您没有指定要使用的版本控制系统,但是如果是git,则可以在添加,删除或修改一行时使用git-gutter在空白处放置一个指示器。可通过MELPA获得M-x package-install git-gutter


这看起来非常接近我的想象,但是似乎它仅在保存缓冲区时更新装订线。我不知道与flymake集成(或以其他方式表现得更像)有多难……

10

您应该查看Ediff。它既可以显示差异,又可以用作(三向)合并工具。它使您可以轻松地还原更改,还可以突出显示改进的差异,以仅向您显示每个实际更改的部分。

ediff的屏幕截图

ediff-revision 使您可以轻松地将其与最新提交或任何先前提交进行比较。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.