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

jcu*_*bic 0 emacs elisp

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

(setq-default prevent-highlight-symbol-mode nil)
Run Code Online (Sandbox Code Playgroud)

我用它来禁用红色标签:

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

并在项目特定的宏中使用它

(project-specifics "projects/some-project"
  (setq prevent-highlight-symbol-mode t)
  (setq indent-tabs-mode t))
Run Code Online (Sandbox Code Playgroud)

但是当我在某个项目目录中打开一个文件并且我prevent-highlight-symbol-mode在任何缓冲区中检查时我都t没有nil,它是全局设置的.如何在缓冲区中将该变量设置为本地?

Dre*_*rew 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).

  • 如果你的代码可以安全地破坏与24.3之前的Emacs版本的兼容性,你可以使用`setq-local`和`defvar-local`. (2认同)