主模式钩子配置影响其他缓冲区。

5

首先声明,我对 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)

我该如何避免这些模式钩子影响到不同模式的其他缓冲区?

谢谢! Andrew

1个回答

4

您需要注意,当设置一些变量时,它们会成为缓冲区的局部变量,而另一些变量则是全局变量。通常,它们在描述中有相应的注释(使用C-h v var-name获取此描述)。

在某些情况下,您可以强制任何变量都成为缓冲区的局部变量,使用

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

但是你需要小心处理这个问题。

看一下描述会有所帮助。有没有一种方法可以强制全局次要模式变成本地模式?具体来说,是show-paren-mode,因为这就是问题的根源。 - user1902144
user1902144:请参阅自动禁用特定主模式的全局次要模式 - phils

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接