在所有非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.
但它仍然不能在保存时修剪空白!我错过了什么?
编辑添加:为了回应德鲁的建议,
- 在文件上手动运行删除尾部空白可以工作
- 如果没有空格清理,仍然无法工作,这并不奇怪,因为
- 删除尾部空白似乎不会在保存时调用
- 基本的保存缓冲区也是如此
我不知道如何研究js2模式是如何拦截/阻止保存前挂钩被触发的。
-
当您正常调用
delete-trailing-whitespace
时(手动),测试它是否对JS文件有效。 -
尝试在同一挂钩上不使用
whitespace-cleanup
——IOW,简化以查看问题所在 -
加载定义
delete-trailing-whitespace
的源文件(simple.el
)。然后是CCD_ 6。然后保存一个JS文件,看看d-t-w
是否被调用。如果它删除了空白,请逐步检查调试器,以确定它是否删除了空白(之后可能会将空白放回),如果没有,为什么不删除。 -
如果从未调用过它,则加载定义调用
buffer-save-hook
的函数(basic-save-buffer
)的文件(files.el
)。先取消M-x cancel-debug-on-entry RET
,再取消M-x debug-on-entry basic-save-buffer
。类似地,看看挂钩是否运行,如果没有,为什么没有,如果是,为什么没有DTRT,等等 -
请注意,如果某个钩子函数引发错误,则
basic-save-hook
不会运行到完成。查看挂钩上有哪些功能等。确定错误是否阻止TRT。
你明白了:调查。
我通过在lambda中包装删除尾部空白而不是引号来实现它。
(add-hook 'js2-mode-hook (lambda ()
(add-hook 'before-save-hook (lambda () (delete-trailing-whitespace)))