indent-tabs-mode仍然使用空格

时间:2017-05-16 04:10:08

标签: emacs indentation

下面是我的init.el脚本。它正在加载,因为列指示器是可见的。但是,编辑任何C文件时,当我只需要选项卡(\t)时,选项卡键仍然会产生4个空格。我从未使用过lisp而且我是emacs的新手,出了什么问题?

(setq-default indent-tabs-mode t)
(require 'fill-column-indicator)


(defun my-c-mode-hook ()
  (setq-default c-default-style "bsd"
                c-basic-offset 4
                tab-width 4
                indent-tabs-mode t)

  (c-set-offset 'substatement-open 0)
  (fci-mode))

(add-hook 'c-mode-hook 'my-c-mode-hook)

1 个答案:

答案 0 :(得分:3)

试试这个:

(setq c-default-style "bsd")

(defun my-c-mode-hook ()
  (setq c-basic-offset 4
        tab-width 4
        indent-tabs-mode t)

  (c-set-offset 'substatement-open 0)
  (fci-mode))

(add-hook 'c-mode-hook 'my-c-mode-hook)

变量具有全局值,可能还有缓冲区本地值。

此外,某些变量在设置时会自动使用缓冲区本地值。这些变量包括c-basic-offsettab-widthindent-tabs-mode(如果您通过 Ch v 描述它们,您可以自己看到)

setq-default设置变量的全局值,但是当c-mode-hook运行时,缓冲区已经建立了本地值,因此将默认值设置为这一点并不是你想要的,因为它不会影响现有的本地值(虽然取决于模式的工作方式,这样做可能会导致 future 缓冲区具有所需的值)。 / p>

setq设置缓冲区本地值(否则为全局值),因此这是您希望用于大多数变量的内容。

相反,

c-default-style不会自动缓冲本地化,因此使用c-mode-hook进行设置时没有任何意义。我们可以设置一次(全局)值。