2013-10-11 191 views
5

我创建一个自定义键绑定宏如下:Emacs的取消绑定模式的键绑定

(global-set-key (kbd "C-C C-c") "\C-a\C- \C-n\M-w\C-y")

的问题是,C-c C-cpython-send-bufferpython-mode定义。所以我的宏适用于除python模式以外的所有模式。我假设python-mode在我的初始化文件后被评估,因此它会覆盖该键绑定。

我尝试不使用C-c C-c使用(eval-after-load "python-mode")和使用global-unset-key但这不起作用。 python中的C-c C-c总是映射到python-send-buffer

我该如何完全禁用Python的C-c C-c,并改用我的宏?

我正在使用Emacs 24.2.1。

+0

C-C C-C是很多模式的定义。也许你应该考虑http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs – scottfrazer

+1

或者只是考虑使用不同的密钥。 'Cc'后跟一个控制键(如'Cc')是“为主要模式保留的”,这意味着定义主要模式的Lisp代码有权使用它(并且它们通常使用'Cc Cc',就像ScottFrazer说过)。当然,用户仍然有权绑定这样的密钥,但只是知道主要模式也会随意这样做,因此您可能需要找到替换密钥以用于此类模式(请参阅此处的答案) 。请参阅Elisp手册,节点“键绑定约定”。 – Drew

+0

@Drew我似乎无法找到一个免费且易于访问的C-x绑定,或者对于我经常使用的复制和粘贴操作有意义。 – darksky

回答

7
(add-hook 'python-mode-hook 
      (lambda() 
      (local-unset-key (kbd "C-c C-c")))) 
1

这应做到:

(add-hook 'python-mode-hook 
      (lambda() 
      (define-key python-mode-map (kbd "C-c C-c") nil)))