Ich habe mit lokalen Variablen experimentiert und Folgendes festgelegt:
(defvar-local foo nil "Buffer local foo")
Ich habe mein Programm später so umgestaltet, dass stattdessen eine globale Variable verwendet wird:
(defvar foo nil "Not buffer local foo")
Aber die Variable ist immer noch pufferlokal und hat sie sogar (kill-local-variable 'foo)
nicht getötet.
Wie kann ich grundsätzlich "rückgängig machen" make-local-variable
?
elisp
local-variables
buffer-local
Maciej Goszczycki
quelle
quelle
make-variable-buffer-local
nichtmake-local-variable
.Antworten:
Der Kommentar von @Malabarba erklärt Ihr Problem.
kill-local-variable
entfernt die lokale Variablenbindung. Da in Ihrem Fall die Variable in jedem Puffer automatisch lokal ist, ist dieser Wert lokal, wenn Sie ihm einen Wert zuweisen.AFAIK, es gibt keine Möglichkeit zu kontern
make-variable-buffer-local
, außerunintern
das Symbol zu verwenden. (makunbound
hilft nicht.)Wenn Sie unintern verwenden, sind Sie in Ordnung. Beachten Sie jedoch, dass durch das Nichteinschalten das Symbol vollständig entfernt wird. Wenn Sie das Symbol also für etwas anderes als eine Variable verwenden, kann dies negative Konsequenzen haben.
Die einzige Antwort, die ich habe, ist,
unintern
die Variable zu verwenden und sie dann neu zuzuweisen, egal welchen Wert Sie möchten - es wird ein globaler Wert sein.quelle