我正在尝试使用局部变量并进行设置:
(defvar-local foo nil "Buffer local foo")
后来我重新设计了程序以使用全局变量,而不是使用:
(defvar foo nil "Not buffer local foo")
但是该变量仍然是局部缓冲区,甚至(kill-local-variable 'foo)
没有杀死它。
基本上,我该如何“撤消” make-local-variable
?
我正在尝试使用局部变量并进行设置:
(defvar-local foo nil "Buffer local foo")
后来我重新设计了程序以使用全局变量,而不是使用:
(defvar foo nil "Not buffer local foo")
但是该变量仍然是局部缓冲区,甚至(kill-local-variable 'foo)
没有杀死它。
基本上,我该如何“撤消” make-local-variable
?
Answers:
@Malabarba的评论解释了您的问题。
kill-local-variable
确实摆脱了局部变量绑定。但是由于在您的情况下该变量在任何缓冲区中都是自动局部的,因此当您为其重新分配一个值时,该值就是局部的。
AFAIK,make-variable-buffer-local
除了unintern
在符号上使用之外,没有其他方法可以对付。(makunbound
无济于事。)
如果您使用unintern,那就可以了。但是请记住,取消interinterning会完全删除该符号,因此,如果将符号用于变量之外的其他内容,则可能会产生负面影响。
因此,我唯一的答案是使用unintern
该变量,然后将其重新分配为所需的任何值-这将是一个全局值。
make-variable-buffer-local
不使用make-local-variable
。