indent-tabs-mode 仍在使用空格
indent-tabs-mode is still using spaces
下面是我的 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)
试试这个:
(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)
变量有一个 global 值,并且可能有一个 buffer-local 值。
此外,当您设置某些变量时,它们将自动使用缓冲区本地值。这些变量包括 c-basic-offset
、tab-width
和 indent-tabs-mode
(如果您通过 C-hv 描述它们,您可以自己看到)
setq-default
设置变量的 global 值,但是在 c-mode-hook
运行时缓冲区局部值已经建立,所以在那一点上设置默认值并不是您真正想要的,因为它不会影响现有的本地值(尽管取决于模式的工作方式,这样做可能会导致 future 缓冲区以获得所需的值)。
setq
在存在时设置缓冲区本地值(否则为全局值),因此这就是您想要用于大多数变量的内容。
相反,c-default-style
不是自动缓冲区本地的,因此用 c-mode-hook
设置它应该没有任何目的。我们可以只设置它的(全局)值一次。
下面是我的 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)
试试这个:
(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)
变量有一个 global 值,并且可能有一个 buffer-local 值。
此外,当您设置某些变量时,它们将自动使用缓冲区本地值。这些变量包括 c-basic-offset
、tab-width
和 indent-tabs-mode
(如果您通过 C-hv 描述它们,您可以自己看到)
setq-default
设置变量的 global 值,但是在 c-mode-hook
运行时缓冲区局部值已经建立,所以在那一点上设置默认值并不是您真正想要的,因为它不会影响现有的本地值(尽管取决于模式的工作方式,这样做可能会导致 future 缓冲区以获得所需的值)。
setq
在存在时设置缓冲区本地值(否则为全局值),因此这就是您想要用于大多数变量的内容。
c-default-style
不是自动缓冲区本地的,因此用 c-mode-hook
设置它应该没有任何目的。我们可以只设置它的(全局)值一次。