首先让我说我是emacs的新手。
我正在尝试为主要模式创建自定义。虽然我的设置运行正常,但我观察到当我打开一个新缓冲区时,缓冲区主模式自定义应用于其他类型的缓冲区。
例如,如果我打开一个名为'Makefile'的文件,则使用makefile-mode并应用我的自定义。如果我然后打开另一个文件,例如'test.c',则使用c-mode,但makefile-mode中的自定义将与c-mode中的自定义项合并。
我的.emacs文件的相关部分如下所示:
(defun c-mode-settings ()
(c-set-style "bsd")
(set-buffer-file-coding-system 'utf-8-unix)
(show-paren-mode 1)
(setq c-basic-offset 4)
(setq tab-width 4)
(setq indent-tabs-mode nil)
(setq c-tab-always-indent t)
(setq require-final-newline t)
)
(defun makefile-mode-settings ()
(setq whitespace-style '(tabs spaces space-mark tab-mark face lines-tail))
(whitespace-mode t)
(show-paren-mode 1)
(setq tab-width 4)
(setq require-final-newline t)
)
(add-hook 'c-mode-hook 'c-mode-settings)
(add-hook 'makefile-mode-hook 'makefile-mode-settings)
如何让这些模式挂钩不会影响不同模式下的其他缓冲区?
谢谢! 安德鲁
答案 0 :(得分:4)
你需要考虑到,一些变量在设置时变为缓冲区本地,而一些变量是全局变量。通常他们在描述中有相应的评论(使用C-h v var-name
来获得此描述。
在某些情况下,您可以使用
强制任何变量变为缓冲区的本地变量(set (make-local-variable 'var-name) var-value)
但你需要小心这一点。