【问题标题】:Store `local-set-key` in the configuration of emacs在 emacs 的配置中存储 `local-set-key`
【发布时间】:2012-12-30 07:17:52
【问题描述】:

例如,我使用命令local-set-keypython-mode 中为flymake-goto-next-error 设置密钥C-c C-n

除了编写表达式并将其包装到python-mode-hook 中,有没有一种方便的方法可以直接存储此键绑定?有人对此有想法吗?

【问题讨论】:

    标签: python emacs elisp key-bindings


    【解决方案1】:

    命令

    (local-set-key (kbd "C-c C-n") 'flymake-goto-next-error)
    

    在当前缓冲区的本地 ma​​p 中工作。本地 ma​​ppython-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 而无需设置 模式

    【讨论】:

    • 不需要python模式,你可以使用eval-after-load:(eval-after-load 'python-mode '(define-key python-mode-map (kbd "C-c C-n") 'flymake-goto-next-error)))仅在模式加载时定义键。
    • @Rémi:不过,目前尚不清楚这将如何改善 python-mode-hook 的任何内容。
    • 使用eval-after-load而不是模式挂钩的优点是它只运行一次,而不是每次在某个缓冲区中启用模式时;但是对于像这样的廉价代码,我认为你用哪种方式来做并不重要。无论您是否要使用它,任何一种方式都比强行 requireing 库要好。
    • 后加载代码的另一个优点是当您想测试此密钥的另一个绑定时:每次打开新文件时,挂钩都会重置密钥,后加载不会。
    猜你喜欢
    • 2012-04-06
    • 2023-03-24
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2020-01-24
    • 1970-01-01
    相关资源
    最近更新 更多