下面是我的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)
答案 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-offset
,tab-width
和indent-tabs-mode
(如果您通过 Ch v 描述它们,您可以自己看到)
setq-default
设置变量的全局值,但是当c-mode-hook
运行时,缓冲区已经建立了本地值,因此将默认值设置为这一点并不是你想要的,因为它不会影响现有的本地值(虽然取决于模式的工作方式,这样做可能会导致 future 缓冲区具有所需的值)。 / p>
setq
设置缓冲区本地值(否则为全局值),因此这是您希望用于大多数变量的内容。
c-default-style
不会自动缓冲本地化,因此使用c-mode-hook
进行设置时没有任何意义。我们可以设置一次(全局)值。