【问题标题】:How do I force a binding in Emacs?如何在 Emacs 中强制绑定?
【发布时间】:2011-04-14 14:25:01
【问题描述】:

我正在尝试绑定<C-return>。我试过global-set-key,但没用。然后我在“Globally override key binding in Emacs”中找到了一个建议,其中有人创建了一个自定义的次要模式,其中包括他们的键绑定,如下所示:

(define-key my-keys-minor-mode-map (kbd "<C-return>") 'insert-and-indent-line-above)

它仍然不会替换当前的绑定。如果我执行describe-key 并按C-Return,它会告诉我它已绑定到cua-set-rectangle-mark

如何使这个绑定取代所有其他绑定?

【问题讨论】:

  • 你真的尝试过制作次要模式吗?对于这类事情,这是一种干净的技术。如果您粘贴代码,那么我们可以帮助您进行调试。
  • 我做到了。它正在运行(我可以在ErgoEmacs 旁边看到my-keys :)

标签: emacs


【解决方案1】:

听起来您启用了cua-mode,它正在设置该绑定。你可以禁用cua-mode:

(cua-mode -1)

或者,像这样更改cua-set-rectangle-mark 的绑定:

(setq cua-rectangle-mark-key (kbd "C-S-<return>"))
(cua-mode 1)

然后你的绑定就会生效(使用global-set-key)。

【讨论】:

  • 我确实想要 cua-mode,但是在 cua-mode 开始之前更改密钥就可以了
  • +1 得到很好的答案,但对于尝试使用此处显示的代码的人有一点评论。它应该是 (setq cua-rectangle-mark-key (kbd "C-S-"))。请注意 符号。它会导致错误,原因可能并不明显。
  • @Cthutu 感谢您注意到这一点。我是在 Emacs 中完成的,它实际上将 放在了整个键和弦周围 - 所以我更新了它。
  • 包裹整个和弦和只包裹返回有什么区别?有区别吗?
  • @Cthutu 这将是一个很好的 SO 问题。 :) 显然没有区别。我实际上更喜欢你设置它的方式,所以我再次编辑。有关可接受语法的更多信息,请查看 edmacro-mode 的文档(显然 info 中没有记录。
【解决方案2】:

你想使用global-unset-key

(global-unset-key (read-kbd-macro "C-<return>"))

【讨论】:

  • 如果我 eval-region 这一行它仍然没有解除绑定。很奇怪。
  • 因为绑定在cua-mode-map,而不是(current-global-map)。来自文档:“请注意,如果 KEY 在当前缓冲区中有本地绑定,则该本地绑定将继续影响您使用此函数进行的任何全局绑定。”
猜你喜欢
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
  • 2011-08-14
  • 2011-08-06
  • 2013-03-07
  • 1970-01-01
  • 2013-02-01
相关资源
最近更新 更多