有些文本编辑器默认可以显示更改的行。但在Emacs中,如何实现?
小模式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))))))
(来源:gyazo.com)
追加: 为了在保存时间时去除高亮,请尝试它:
(add-hook 'after-save-hook
(lambda ()
(when highlight-changes-mode
(save-restriction
(widen)
(highlight-changes-remove-highlight (point-min) (point-max))))))
我假设你对缓冲区和保存文件之间的更改感兴趣。 我通常使用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
(整个项目)与版本控制下的文件进行差异比较。
(setq diff-hl-fringe-bmp-function 'diff-hl-fringe-bmp-from-type)
来使用这种位图,或者使用自定义函数,如果您想要使用其他位图或不同的选择逻辑。 - Dmitry