我目前在我的保存挂钩中使用whitespace-cleanup
。使用indent-tabs-mode
,我可以在没有任何标签的情况下保存文件。
一切都很好,我不希望我的文件中有标签。但
Makefile确实需要标签。那是我的问题。如何更改makefile-mode的设置?
我尝试setq
indent-tabs-mode
(文档说它变成缓冲区本地)或whitespace-style
,它不起作用。
答案 0 :(得分:3)
以下代码工作正常,只要在打开任何文件之前将其加载到.emacs中(我有自己的项目管理器,它会重新打开最后的文件)。
(defun my-tabs-makefile-hook ()
(setq indent-tabs-mode t))
(add-hook 'makefile-mode-hook 'my-tabs-makefile-hook)
答案 1 :(得分:2)
我遇到了同样的问题,似乎这是Emacs中的一个错误(截至24.2)。试试这个,使用以下.emacs
:
(setq-default indent-tabs-mode nil)
(add-hook 'after-save-hook 'whitespace-cleanup)
如果你打开一个文件,保存它,然后打开一个Makefile,你就会遇到你描述的问题。但是如果先打开Makefile,保存它,然后打开另一种类型的文件,你就会遇到相反的问题:8个空格将被标签取代。
问题是indent-tabs-mode
是缓冲区本地的,但在whitespace.el
中它被设置为一个名为whitespace-indent-tabs-mode
的常规变量。因此,看到的第一个值是重要的值。
这是解决其他一些问题的另一种解决方法。将其添加到您的.emacs
:
(defadvice whitespace-cleanup (around whitespace-cleanup-indent-tab
activate)
"Fix whitespace-cleanup indent-tabs-mode bug"
(let ((whitespace-indent-tabs-mode indent-tabs-mode)
(whitespace-tab-width tab-width))
ad-do-it))
答案 2 :(得分:0)
我在空白处找到的最佳解决方案是ethan-wspace。它清理你自己弄脏的任何空白,但保留其他空白。
它适用于makefile中的制表符,避免了杂乱的差异问题,其中有很多只是空白变化的差异线