【发布时间】:2012-12-30 07:17:52
【问题描述】:
例如,我使用命令local-set-key 在python-mode 中为flymake-goto-next-error 设置密钥C-c C-n。
除了编写表达式并将其包装到python-mode-hook 中,有没有一种方便的方法可以直接存储此键绑定?有人对此有想法吗?
【问题讨论】:
标签: python emacs elisp key-bindings
例如,我使用命令local-set-key 在python-mode 中为flymake-goto-next-error 设置密钥C-c C-n。
除了编写表达式并将其包装到python-mode-hook 中,有没有一种方便的方法可以直接存储此键绑定?有人对此有想法吗?
【问题讨论】:
标签: python emacs elisp key-bindings
命令
(local-set-key (kbd "C-c C-n") 'flymake-goto-next-error)
在当前缓冲区的本地 map 中工作。本地 map 为 python-mode-map 时正确。
方便的最小长度命令(不使用hook)
(define-key python-mode-map (kbd "C-c C-n") 'flymake-goto-next-error)
在创建变量 python-mode-map 时工作。
变量python-mode-map在调用后动态创建(在文件python-mode.el中)
(require 'python-mode)
如果没有加载python-mode,命令define-key不能直接使用python-mode-map。使用挂钩是为了安全。您的 emacs 配置应该是可靠的(如果可能的话,它不应该依赖于命令的执行顺序),并且这种包装(带有钩子)命令可以防止错误情况:在 mode-map 中设置 keybind 而无需设置 模式。
【讨论】:
(eval-after-load 'python-mode '(define-key python-mode-map (kbd "C-c C-n") 'flymake-goto-next-error)))仅在模式加载时定义键。
python-mode-hook 的任何内容。
eval-after-load而不是模式挂钩的优点是它只运行一次,而不是每次在某个缓冲区中启用模式时;但是对于像这样的廉价代码,我认为你用哪种方式来做并不重要。无论您是否要使用它,任何一种方式都比强行 requireing 库要好。