2010-09-20 45 views
3

我想绑定<C-return>。我试过global-set-key,但没有奏效。然后我发现了一个建议,在有人创建了一个自定义的次要模式,其中包括他们的键绑定,这样的“Globally override key binding in Emacs”:如何在Emacs中强制绑定?

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

位仍不会取代现有的约束力。如果我执行describe-key并按C-Return它告诉我它将被绑定到cua-set-rectangle-mark

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

+0

你真的尝试过使用次要模式吗?这是一种干净的技术,如果你粘贴你的代码,那么我们可以帮你调试。 – jrockway 2010-09-21 16:53:14

+0

我做到了。它正在运行(我可以看到'ErgoEmacs'旁边的'my-keys' :) – MDCore 2010-09-22 14:58:25

回答

8

这听起来像你有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)。

+0

我确实想要cua-mode,但是在cua-mode开始之前更改密钥并没有诀窍 – MDCore 2010-09-22 15:15:55

+1

对于很好的答案+1,但是有点评论对于试图使用此代码的人来说,如下所示。它应该是(setq cua-rectangle-mark-key(kbd“C-S-”))。请注意0​​符号。它会导致一个错误,它可能不是很明显的原因。 – Cthutu 2013-02-04 20:57:00

+0

@Cthutu感谢您的注意。我在Emacs中做过,实际上它把<>围绕整个关键和弦 - 所以我更新了它。 – 2013-02-04 21:09:02

0

你想使用global-unset-key

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

中,如果我'eval-region'这行还没有取消绑定它,非常奇怪。 – MDCore 2010-09-20 13:56:39

+3

因为绑定在'cua-mode-map'中,而不是'(current-global-map)'。从文档:“请注意,如果KEY在当前缓冲区中有一个本地绑定,那么本地绑定将继续以隐藏您使用此功能进行的任何全局绑定 。“ – jrockway 2010-09-21 16:37:56