【问题标题】:How can I make variable local in a buffer with global default in Emacs如何在 Emacs 中使用全局默认值在缓冲区中使变量成为本地变量
【发布时间】:2014-03-28 05:20:29
【问题描述】:

在 .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,它是全局设置的。如何使该变量在缓冲区中成为本地变量?

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    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-localdefvar-local
    • 我可以在 .emacs 中运行 make-variable-buffer-localnil 并在特定挂钩中使用 t 运行 make-local-variable 吗?所有带有t 的缓冲区都会有nil 吗?
    • 您通常不会混合使用它们。 make-variable-buffer-local 接受一个参数,一个变量。调用时,它将确保如果您曾经使用 setq 设置该变量,它会自动变为缓冲区本地。
    • 它工作,但现在我有不同的订单问题。
    猜你喜欢
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多