如何在emacs中修剪js2模式中的尾随空格

时间:2013-12-06 00:36:34

标签: javascript emacs js2-mode

修剪尾随空格可以在所有非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.

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

编辑添加:回应Drew的建议,

  1. 在文件上手动运行delete-trailing空格工作。
  2. 如果没有空白清理仍然无效,这并不奇怪,因为......
  3. 似乎没有在保存时调用delete-trailing-whitespace。
  4. 基本保存缓冲区都没有。
  5. 我不确定如何调查js2-mode如何拦截/阻止触发前保存挂钩。

2 个答案:

答案 0 :(得分: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-hook)。 M-x cancel-debug-on-entry RET取消第一个,然后M-x debug-on-entry basic-save-buffer。同样,看看钩子是否运行,如果没有,为什么不运行,如果是,为什么它不是DTRT等。

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

  6. 你明白了:调查。

答案 1 :(得分:1)

我通过在lambda而不是quote中包含delete-trailing-whitespace来实现它。

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