2

修剪尾随空格适用于所有非 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. 保存时似乎没有调用 delete-trailing-whitespace 。
  4. 基本保存缓冲区也没有。

我不确定如何调查 js2-mode 是如何拦截/防止 before-save-hooks 被触发的。

4

2 回答 2

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

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

  3. 加载simple.el定义delete-trailing-whitespace. 然后M-x debug-on-entry delete-trailing-whitespace。然后保存一个 JS 文件,看看是否d-t-w甚至被调用。如果确实如此,请逐步通过调试器来确定它是否删除了空格(并且空格可能随后被放回),如果没有,为什么不删除。

  4. 如果它从未被调用,则加载files.el定义basic-save-buffer调用的函数 ()的文件 () buffer-save-hookM-x cancel-debug-on-entry RET取消第一个,然后M-x debug-on-entry basic-save-buffer。同理,看钩子是否运行,如果没有,为什么没有,如果有,为什么没有DTRT等。

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

你明白了:调查。

于 2013-12-06T02:22:30.770 回答
1

我通过将 delete-trailing-whitespace 包装在 lambda 而不是引号中来使其工作。

(add-hook 'js2-mode-hook (lambda () 
                           (add-hook 'before-save-hook (lambda () (delete-trailing-whitespace)))
于 2014-09-26T18:09:51.273 回答