【求助】before-save-hook 是每个文件都需要设置一次呢?还是只添加一次就好?

我有一个需求:在当前文件保存前,将当前 Buffer 的内容交给 ESlint 去修复,然后再写入。

我需要注意的是:

  • before-save-hook 是仅在当前设置的文件中生效吗?会不会影响其它的文件,我需要只影响当前文件。
  • 我写了 before-save-hook 后,Emacs 还会继续执行文件的保存吗?我需要的是 Emacs 中断保存文件。

我在网上查了查,好像没有相关的介绍。如果有大佬知道,烦请在下面留言,不胜感激 :blush:

你直接用 add-advice 去改变 save-buffer 这个函数更简单, 只针对当前文件, 结合 local var 就好了。

1 个赞

大佬,你说的是 advice-add 吗?我在网上只查到了这个……

你看一下 before-save-hook 的文档就都明白了,哪里用得着等人来给你解答

文档里写着,这个 hook 只会被 save-buffer 这个函数调用,并且在 buffer 保存之前运行

懒猫大佬的意思是,如果你担心影响别的文件,就只修改 save-buffer 对应的行为就行了;至于名字啥的,毕竟不是每个人随时都在电脑前,明白相关的意思就行了

关于你问题的解决方法,也很简单

;; hook
(add-to-list 'before-save-hook (lambda () ...))
;; advice
(advice-add 'save-buffer :before (lambda (&rest r) ...))
2 个赞

emacs 有自带文档,直接 C-h fadd-advice 这样查看函数的使用

2 个赞