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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在保存之前对Emacs中更改的行执行操作?相关的知识,希望对你有一定的参考价值。

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

答案

使用高亮变化模式机器

您可以使用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空格以保存修改后的线条。

以上是关于如何在保存之前对Emacs中更改的行执行操作?的主要内容,如果未能解决你的问题,请参考以下文章

一些 emacs 桌面保存问题:如何将其更改为保存在 ~/.emacs.d/.emacs.desktop

使用 tramp 自动保存其他窗口时 Emacs 更改缓冲区

如何动态更改访问图表的行源

如何在 Emacs 中保存所有文件(或保存所有缓冲区)?

6 件你应该用 Emacs 做的事

如何在PrimeFaces中找出DataTable是否处于行编辑状态?