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

问题描述 投票:4回答:1

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

emacs elisp
1个回答
3
投票

使用高亮变化模式机器

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

EG,

(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*缓冲区(和回声区域)。

full implementation example

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

© www.soinside.com 2019 - 2024. All rights reserved.