Я экспериментировал с локальными переменными и установил:
(defvar-local foo nil "Buffer local foo")
Позже я перепроектировал мою программу, чтобы вместо нее использовать глобальную переменную:
(defvar foo nil "Not buffer local foo")
но переменная все еще остается локальной буферизацией и даже (kill-local-variable 'foo)
не уничтожает ее.
В основном, как я могу "отменить" make-local-variable
?
elisp
local-variables
buffer-local
Мацей Гошицкий
источник
источник
make-variable-buffer-local
не используетmake-local-variable
.Ответы:
Комментарий @Malabarba объясняет вашу проблему.
kill-local-variable
действительно избавляется от привязки локальной переменной. Но поскольку в вашем случае переменная автоматически является локальной в любом буфере, то при переназначении ей значения это значение является локальным.AFAIK, нет способа противостоять
make-variable-buffer-local
, кроме как использоватьunintern
на символе. (makunbound
не помогает.)Если вы используете Intern, то все в порядке. Но имейте в виду, что использование символа "без" приводит к удалению символа в целом, поэтому, если вы использовали символ для чего-то другого, кроме переменной, то это может привести к негативным последствиям.
Таким образом, единственный ответ, который у меня есть, - это использовать,
unintern
а затем переназначить переменную на любое значение, которое вы хотите - это будет глобальное значение.источник