我想要一個顯示變量值的全局鍵盤快捷鍵。但是,變量的值可能會根據當前緩衝區中的當前主模式而改變。Emacs中的模式局部變量
我嘗試添加以下到我的~/.emacs
:
(defun my-elisp-mode-setup()
(defvar-local *current-mode-var* "elisp-mode")
)
(defun my-sh-mode-setup()
(defvar-local *current-mode-var* "sh-mode")
)
(add-hook 'emacs-lisp-mode-hook 'my-elisp-mode-setup)
(add-hook 'sh-mode-hook 'my-sh-mode-setup)
如果我現在emacs test.sh
啓動Emacs,然後在test.sh
緩衝類型M-x describe-variable *current-mode-var*
,我得到
*current-mode-var*'s value is "elisp-mode"
Automatically becomes buffer-local when set.
Documentation:
Not documented as a variable.
,而我預期得到*current-mode-var*'s value is "sh-mode"
感謝的價值!如果我使用'setq',那麼變量如何變成本地? –
聲明後它是本地緩衝區。這類似於聲明類型並在C中分配 :賦值不會更改類型。所以'defvar-local'後面跟'setq'將*不會*改變 變量到非本地。 –
好的。這是否意味着你必須在'〜/ .emacs'中添加'(defvar-local * current-mode-var * nil)',然後在模式鉤子中使用'setq'? –