在Emacs中,是否可以定义特定于文件的按键绑定? 我认为可以创建一个小模式,并在打开特定文件时加载它,但对于仅有一个按键绑定来说,这似乎过于繁琐。
在Emacs中,是否可以定义特定于文件的按键绑定? 我认为可以创建一个小模式,并在打开特定文件时加载它,但对于仅有一个按键绑定来说,这似乎过于繁琐。
local-set-key
和Emacs中本地覆盖小模式按键绑定,那么你可能会得到类似于下面的代码:(defun my-buffer-local-set-key (key command)
(interactive "KSet key buffer-locally: \nCSet key %s buffer-locally to command: ")
(let ((oldmap (current-local-map))
(newmap (make-sparse-keymap)))
(when oldmap
(set-keymap-parent newmap oldmap))
(define-key newmap key command)
(use-local-map newmap)))
然后,根据Barmar的回答:
;; Local Variables:
;; eval: (my-buffer-local-set-key (kbd "C-c C-c") 'foo)
;; End:
在文件本地变量部分使用eval:
:
;;; Local Variables:
;;; eval: (local-set-key ...)
major-mode
设置绑定吗?那么其他使用此模式的缓冲区也会得到相同的绑定? - abo-abo我猜你做错了些事情。如果你有一个特定的文件缓冲区,适合绑定某个键,那么请为其定义一个专门的模式,并在该模式的按键映射中绑定该键。让该模式继承你喜欢的任何其他模式。
例如:
(define-derived-mode my-file-mode org-mode "My file mode")
(define-key 'my-file-mode-map (kbd "SPC") #'org-toggle-checkbox)
C-x C-f
或其他方式)?为什么只有这个文件 - 有什么特别之处?按键用于什么?所以很难给您提供任何有用的建议。keymap
在每个位置添加您的绑定。当然,这听起来相当愚蠢,但就目前而言,您的问题也是如此。(define-minor-mode magic-mode
"Provide functions to do magic."
:lighter " !!!"
:keymap (let ((map (make-sparse-keymap)))
(define-key map (kbd "M-z") 'xyzzy)
map)
)
(defun xyzzy()
"Use at your own risk"
(message "Nothing happens.")
)
(provide 'magic-mode)
需要将它放置在 .emacs 会查找的某个地方,并在 .emacs 中添加以下行:
(require magic-mode)
;; Local Variables:
;; eval: (magic-mode)
;; End: