如何在Emacs中使用全局默认值使缓冲区中的变量成为局部变量

如何在Emacs中使用全局默认值使缓冲区中的变量成为局部变量,emacs,elisp,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-sy

在.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))))
并将其用于


但是,当我在某个项目目录中打开一个文件,并在我拥有的任何缓冲区中检查
t
而不是
nil
中的
protect highlight symbol mode
,它被全局设置。如何使该变量在缓冲区中成为局部变量?

使局部变量
使变量在当前缓冲区中具有局部绑定

make variable buffer local
使变量在所有缓冲区(甚至未来的缓冲区)中具有本地绑定


如果在当前缓冲区中执行了
(使局部变量'A-VAR)
,则
(setq A-VAR A-VALUE)
设置局部值。您也可以只使用
(设置(使局部变量'A-VAR)A-VALUE)

使局部变量
使变量在当前缓冲区中具有局部绑定

make variable buffer local
使变量在所有缓冲区(甚至未来的缓冲区)中具有本地绑定


如果在当前缓冲区中执行了
(使局部变量'A-VAR)
,则
(setq A-VAR A-VALUE)
设置局部值。您也可以只使用
(设置(使局部变量'A-VAR)A-VALUE)

来实现,如果您的代码可以安全地中断与24.3之前的Emacs版本的兼容性,您可以使用
setq local
defvar local
。我可以在.emacs中使用
nil
运行
make variable buffer local
,在特定hook中使用
t
运行
make local variable
?除了
t
之外的所有缓冲区是否都有
nil
?您通常不会混合使用它们<代码>将变量缓冲区设为本地接受一个参数,即一个变量。调用时,它将确保如果您曾经使用
setq
设置该变量,它将自动成为buffer-local。它可以工作,但现在我对顺序有不同的问题。如果您的代码可以安全地中断与24.3之前的Emacs版本的兼容性,您可以使用
setq local
defvar local
。我可以在.emacs中使用
nil
运行
make variable buffer local
,在特定hook中使用
t
运行
make local variable
?除了
t
之外的所有缓冲区是否都有
nil
?您通常不会混合使用它们<代码>将变量缓冲区设为本地接受一个参数,即一个变量。调用时,它将确保如果您曾经使用
setq
设置该变量,它将自动成为buffer-local。它可以工作,但现在我对顺序有不同的问题。
(project-specifics "projects/some-project"
  (setq prevent-highlight-symbol-mode t)
  (setq indent-tabs-mode t))