2012-12-13 47 views
5

让我首先说我对emacs很新。主要模式钩子配置影响其他缓冲区

我正在尝试为主要模式创建自定义。虽然我的设置正常运行,但我注意到,当我打开一个新的缓冲区时,缓冲区主模式自定义正在应用于其他类型的其他缓冲区。例如,如果我打开一个名为'Makefile'的文件,则使用makefile-mode并应用我的自定义。如果我然后打开另一个文件,如'test.c',则使用c模式,但是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) 

我怎样才能把这些模式的钩子从影响在不同模式下的其他缓冲区?

谢谢! Andrew

回答

4

您需要考虑到,有些变量在设置时变为局部缓冲区,而有些则是全局变量。通常他们有相应的注释在他们的描述(用C-h v var-name得到这个描述。

在某些情况下,你可以强制任何变量成为当地缓存,使用

(set (make-local-variable 'var-name) var-value) 

,但你必须要小心

+0

看看描述有帮助有没有办法强制一个全球小模式成为本地?特别是show-paren模式,因为这是什么导致的问题 – user1902144

+0

user1902144:请参阅[自动禁用一个特定的主要模式的全球次要模式](http://stackoverflow.com/questions/6837511/au tomatically-禁用-A-全球小调模式换一个特定的,主要模式/ 6839968) – phils

相关问题