无论主要模式如何强制空格而不是标签?

时间:2011-05-05 17:30:59

标签: emacs

我希望所有标签都是4个空格。我在.emacs

中有以下内容
(setq-default indent-tabs-mode nil)
(setq c-basic-indent 4)
(setq tab-width 4)

但这会被我可以使用的一些主要模式主题所覆盖。有没有办法通过我的.emacs文件强制解决这个问题?

3 个答案:

答案 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所有标签是获得一致缩进的一种方法。 :)