如何在保存之前对Emacs中更改的行执行操作?

时间:2013-01-03 00:39:25

标签: emacs elisp

我想添加一个before-save-hook,我可以对上次保存后更改的行进行一些操作。例如,删除尾随空格,检查缩进等。我不想为整个文件执行此操作,并且我知道每个文件都有单独的选项(只是删除所有更改行的尾随空格,等..),但我想要一些通用的东西,以便我可以添加更多的东西。我想有些东西可以让我更改行号列表,或者get-first-changed-line(),get-next-changed-line()类型的函数。

1 个答案:

答案 0 :(得分:3)

使用突出显示更改模式机器

您可以使用highlight-changes-mode,然后使用hilit-chg迭代它设置的文字属性next-single-property-change

如,

(with-current-buffer "my-buffer-name"
  (let ((beg (point-min)) end)
    (while (setq end (next-single-property-change beg 'hilit-chg))
      (setq beg (next-single-property-change end 'hilit-chg))
      (message "[[%s]]" (buffer-substring-no-properties end beg)))))

将产生以下内容:

[[
these are my changes

]]
[[ and here]]
[[
here are more changes
]]

*Messages*缓冲区(以及回显区域)。

完整实施示例

ws-butler使用此机制修剪EOL上的空格以保存以进行修改 线。