我想让我的逗号:,
在c-mode下变成逗号加空格,所以我写了以下代码:
(add-hook 'c-mode-hook 'trun_commas_into_commas_and_spaces)
(defun trun_commas_into_commas_and_spaces ()
", to , SPC."
(interactive)
(define-key evil-insert-state-map (kbd ",") (kbd "C-q , SPC")))
当我首先打开一个 .el 文件时,上面函数是不生效的,然后我切换到 .c 文件,函数生效,到目前为止一切正常。但是当我重新从 .c 文件切换到 .el 文件时,我发现这个函数还是生效。
有什么办法可以让hook在我切换buffer时重新检测一下这个函数是否应当启动吗?或者还有别的办法可以达成我的目的?
方法有很多,比如说用 make-local-variable
把 evil-insert-state-map
变成 buffer-local 的,这样就不会影响其他 buffer 。
(add-hook 'c-mode-hook 'trun_commas_into_commas_and_spaces)
(defun trun_commas_into_commas_and_spaces ()
", to , SPC."
(interactive)
(make-local-variable 'evil-insert-state-map)
(define-key evil-insert-state-map (kbd ",") (kbd "C-q , SPC")))
这样应该就可以了。
我将您的这段代码复制到我的配置中,但是结果还是和我在开始时描述的一样
(add-hook 'c-mode-hook 'trun_commas_into_commas_and_spaces)
(defun trun_commas_into_commas_and_spaces ()
", to , SPC."
(define-key evil-insert-state-local-map (kbd ",") (kbd "C-q , SPC")))
我看了一下 evil 的 doc,原来 evil 有自己的本地变量