我该如何在Emacs中显示更改的行?

4

有些文本编辑器默认可以显示更改的行。但在Emacs中,如何实现?

2个回答

11

小模式highlight-changes-mode会显示文本更改。

添加:

我为highlight-changes-mode编写了一些针对边框的支持代码。

(eval-after-load "hilit-chg"
  '(progn
     (defvar highlight-fringe-mark 'filled-square
       "The fringe bitmap name marked at changed line.
Should be selected from `fringe-bitmaps'.")

     (defadvice hilit-chg-make-ov (after hilit-chg-add-fringe activate)
       (mapc (lambda (ov)
           (if (overlay-get ov 'hilit-chg)
           (let ((fringe-anchor (make-string 1 ?x)))
             (put-text-property 0 1 'display
                    (list 'left-fringe highlight-fringe-mark)
                    fringe-anchor)
             (overlay-put ov 'before-string fringe-anchor))
         ))
         (overlays-at (ad-get-arg 1))))))

fringed
(来源:gyazo.com)

追加: 为了在保存时间时去除高亮,请尝试它:

(add-hook 'after-save-hook
          (lambda ()
            (when highlight-changes-mode
              (save-restriction
                (widen)
                (highlight-changes-remove-highlight (point-min) (point-max))))))

我试过了。它和我预期的有点不同。如果更改标记显示在左侧边缘会更好。但它仍然很有用。谢谢。 - Kei Minagawa
我的帖子中添加了边缘支持代码。如果您想尝试,请使用它。 - d5884
那是一段很棒的代码。为什么不是标准的?不太好理解...不过,我们该如何调整它,使得每次保存时都会移除边缘上的标记? - user3341592
这个完美地运行,但是有一个问题:更改文本的颜色不符合语法高亮。因此,我想出了一个解决办法来添加这个:https://pastebin.com/t5A5RQYQ - Mehrad Mahmoudian

3

我假设你对缓冲区和保存文件之间的更改感兴趣。 我通常使用diff-buffer-with-file进行比较,因为我不需要太频繁地使用它。


我还使用diff-hl模式,它显示了版本控制系统中最后一次提交与已保存文件的更改行。 它可以在Melpa中获取。

这是我的配置,它将指示器更改为“+”,“-”和“!”:

(setq diff-hl-fringe-bmp-function 'diff-hl-fringe-bmp-from-type)
(global-diff-hl-mode 1)

虽然您没有询问,但我还是要提一下,vc 可以轻松地使用 C-x v =(当前文件)或 C-x v D(整个项目)与版本控制下的文件进行差异比较。


1
从版本1.5.0开始,您可以使用(setq diff-hl-fringe-bmp-function 'diff-hl-fringe-bmp-from-type)来使用这种位图,或者使用自定义函数,如果您想要使用其他位图或不同的选择逻辑。 - Dmitry
@Dmitry 谢谢,这样简单多了。 - jpkotta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接