如何在Emacs中使用全局默认值在缓冲区中创建变量local

时间:2014-03-26 20:55:23

标签: emacs elisp

在.emacs中我将变量定义为:

(setq-default prevent-highlight-symbol-mode nil)

我用它来禁用红色标签:

(add-hook 'font-lock-mode-hook
          (lambda()
            (if (and (null (memql major-mode highlight-chars-disable))
                     (not prevent-highlight-symbol-mode))
                 (hc-highlight-tabs))))

并在project-specifics macro

中使用它
(project-specifics "projects/some-project"
  (setq prevent-highlight-symbol-mode t)
  (setq indent-tabs-mode t))

但是当我在某个项目目录中打开一个文件并且我在任何缓冲区中检查prevent-highlight-symbol-mode时我已经t而不是nil,它已设置globaly。如何在缓冲区中将该变量设为本地?

1 个答案:

答案 0 :(得分:5)

make-local-variable使变量在当前缓冲区中具有本地绑定。

make-variable-buffer-local使变量在所有缓冲区中都具有本地绑定(即使是未来的缓冲区)。

如果您在当前缓冲区中完成(make-local-variable 'A-VAR),则(setq A-VAR A-VALUE)设置本地值。您也可以只使用(set (make-local-variable 'A-VAR) A-VALUE)