2014-03-26 22 views
0

在的.emacs局部变量为:我怎样才能让在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,它设置为全局。我怎样才能使这个变量局部在缓冲区中?

回答

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)

+2

如果你的代码可以安全地断开与Emacs的版本兼容之前的24.3,您可以用'setq-local'和'defvar-local'。 – phils

+0

我可以运行'使变缓冲 - local'用的.emacs'nil'并与't'具体钩'使本地-variable'?所有的缓冲区都会用't'来解除那个'nil'吗? – jcubic

+0

你通常不会混合它们。 'make-variable-buffer-local'有一个参数,一个变量。在调用时,这将确保,如果你曾经使用'setq'设置变量,它会自动成为缓冲区局部。 – Lindydancer

相关问题