我希望所有标签都是4个空格。我在.emacs
(setq-default indent-tabs-mode nil)
(setq c-basic-indent 4)
(setq tab-width 4)
但这会被我可以使用的一些主要模式主题所覆盖。有没有办法通过我的.emacs
文件强制解决这个问题?
答案 0 :(得分:6)
尝试此操作以覆盖任何主要模式覆盖的任何内容:
(add-hook 'after-change-major-mode-hook
'(lambda ()
(setq-default indent-tabs-mode nil)
(setq c-basic-indent 4)
(setq tab-width 4)))
请注意,不基于c-mode
的主要模式不太可能关心c-basic-indent
,并且可能使用自己的特定于模式的缩进变量。在这种情况下,无法手动配置这些变量。
答案 1 :(得分:2)
声明默认C indentation style,而不是声明特定的样式参数。
(setq c-default-style "k&r2") ;; or whatever your preference is
(set-default 'indent-tabs-mode nil)
答案 2 :(得分:0)
我用一个特别丑陋的黑客“解决”了这个问题。我没有尝试弄清楚如何获得正确的主模式挂钩,而是执行以下操作:
(defun save-buffer-without-tabs ()
(interactive)
(untabify (point-min) (point-max))
(save-buffer))
(global-set-key "\C-x\C-s" 'save-buffer-without-tabs)
这可怕地打破了一些事情(我关心的是,那些东西是Python和Makefiles)。因此,我也做了以下事情:
;; restore the original save function for makefiles
(add-hook 'makefile-mode-hook
(lambda ()
(define-key makefile-mode-map "\C-x\C-s" 'save-buffer)))
;; restore the original save function for python files
(add-hook 'python-mode-hook
(lambda () (define-key python-mode-map "\C-x\C-s" 'save-buffer)))
我不知道托马斯提到的after-change-major-mode-hook
,但如果他的解决方案由于某种原因不适合你,我已经使用了几年而没有发生任何事故。
编辑:经过仔细检查,我认为您没有问我所回答的问题。我猜nuking所有标签是获得一致缩进的一种方法。 :)