【问题标题】:How do I bind keys in emacs for a particular mode?如何在 emacs 中为特定模式绑定键?
【发布时间】:2014-11-14 02:53:13
【问题描述】:

This page 解释了如何将键绑定到某个命令或文本输入。

但是,如果我只想为特定模式(比如 LaTeX 模式)绑定呢?

具体来说,在LaTeX模式下,我想输入文字\begingroupCtrl-{被按下,当输入\endgroup Ctrl-} 被按下。

我从this answer尝试了以下,

(eval-after-load 'latex-mode 
  '(define-key latex-mode-map (kbd "C-{") "\begingroup"))
(eval-after-load 'latex-mode 
  '(define-key latex-mode-map (kbd "C-}") "\endgroup"))

但它似乎不起作用。

【问题讨论】:

    标签: emacs key-bindings


    【解决方案1】:

    latex-mode 是 tex-mode 的别名。您还需要转义\ 我认为你想要做的是:

    (eval-after-load 'tex-mode
      '(define-key latex-mode-map (kbd "C-{") "\\begingroup"))
    

    【讨论】:

    • 不,它工作。此外,C-h k 说 C-{ 是未定义的。
    • 如果我激活乳胶模式并为 C-{ 执行“C-h k”然后我得到C-{ runs the command "\\begingroup", which is a keyboard macro.
    • 这就是我所做的。 1) 将您的代码放入 ~/.emacs。 2) 关闭 emacs 并从 .tex 文件开始(我也可以简单地加载 .emacs 文件)。这将启动 LaTeX 模式。 3)现在如果我按 C-{,emacs 说 C-{ 是未定义的。如果我按 C-h k C-{,我会收到相同的消息。我可能会错过什么? (我用AucTeX,有什么关系吗?)
    • (define-key LaTeX-mode-map (kbd "C-{") "\\begingroup"),改编自tex.stackexchange.com/a/50981/14103解决了我的问题。
    • eval-after-load 只是在加载乳胶模式时执行'define-key',而不是更早。所以你不一定需要它。由于我不知道 AucTex,我的猜测是 (eval-after-load 'auctex ...。变量是区分大小写的,所以这可能就是为什么它不能立即使用 AucTex 模式和映射击键。
    猜你喜欢
    • 2011-07-26
    • 2011-05-01
    • 2011-03-08
    • 1970-01-01
    • 2014-09-29
    • 2014-02-24
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    相关资源
    最近更新 更多