如何在emacs中的js2模式中修剪尾部空白

How to trim trailing whitespace in js2-mode in emacs

本文关键字:修剪 尾部 空白 模式 js2 emacs 中的      更新时间:2024-04-05

在所有非JS文件上修剪尾部空白效果良好。我的emacs:里有这些行

(add-hook 'before-save-hook 'delete-trailing-whitespace)
(add-hook 'before-save-hook 'whitespace-cleanup)

我还使用M-x customize-group <enter> js2-mode设置:

Js2 Cleanup Whitespace: [Hide Value] [Toggle]  on (non-nil)
   [State]: SAVED and set.
Non-nil to invoke `delete-trailing-whitespace' before saves.

但它仍然不能在保存时修剪空白!我错过了什么?

编辑添加:为了回应德鲁的建议,

  1. 在文件上手动运行删除尾部空白可以工作
  2. 如果没有空格清理,仍然无法工作,这并不奇怪,因为
  3. 删除尾部空白似乎不会在保存时调用
  4. 基本的保存缓冲区也是如此

我不知道如何研究js2模式是如何拦截/阻止保存前挂钩被触发的。

  1. 当您正常调用delete-trailing-whitespace时(手动),测试它是否对JS文件有效。

  2. 尝试在同一挂钩上不使用whitespace-cleanup——IOW,简化以查看问题所在

  3. 加载定义delete-trailing-whitespace的源文件(simple.el)。然后是CCD_ 6。然后保存一个JS文件,看看d-t-w是否被调用。如果它删除了空白,请逐步检查调试器,以确定它是否删除了空白(之后可能会将空白放回),如果没有,为什么不删除。

  4. 如果从未调用过它,则加载定义调用buffer-save-hook的函数(basic-save-buffer)的文件(files.el)。先取消M-x cancel-debug-on-entry RET,再取消M-x debug-on-entry basic-save-buffer。类似地,看看挂钩是否运行,如果没有,为什么没有,如果是,为什么没有DTRT,等等

  5. 请注意,如果某个钩子函数引发错误,则basic-save-hook不会运行到完成。查看挂钩上有哪些功能等。确定错误是否阻止TRT。

你明白了:调查。

我通过在lambda中包装删除尾部空白而不是引号来实现它。

(add-hook 'js2-mode-hook (lambda () 
                           (add-hook 'before-save-hook (lambda () (delete-trailing-whitespace)))