Emacs解除模式绑定';s键绑定

Emacs解除模式绑定';s键绑定,emacs,key-bindings,emacs24,python-mode,Emacs,Key Bindings,Emacs24,Python Mode,我创建了一个自定义键绑定宏,如下所示: (全局设置键(kbd“C-C-C”)“\C-a\C-\C-n\M-w\C-y”) 问题是C-C-C是在python模式下为python发送缓冲区定义的。因此,我的宏适用于除python模式之外的所有模式。我假设python模式是在我的init文件之后计算的,因此它会覆盖该键绑定 我尝试使用(加载后评估“python模式”)和全局取消设置键来取消设置C-C-C,但这不起作用C-C C-C始终映射到python发送缓冲区 我怎样才能完全禁用Python的C-C

我创建了一个自定义键绑定宏,如下所示:

(全局设置键(kbd“C-C-C”)“\C-a\C-\C-n\M-w\C-y”)

问题是
C-C-C
是在
python模式下为
python发送缓冲区
定义的。因此,我的宏适用于除python模式之外的所有模式。我假设
python模式
是在我的init文件之后计算的,因此它会覆盖该键绑定

我尝试使用
(加载后评估“python模式”)
全局取消设置键来取消设置
C-C-C
,但这不起作用C-C C-C
始终映射到
python发送缓冲区

我怎样才能完全禁用Python的
C-C-C
,而改用我的宏呢

我正在使用Emacs 24.2.1。

这应该可以做到:

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

C-C-C定义了很多模式。也许你应该考虑或者只是考虑使用一个不同的键。code>C-C
后跟一个控制键(如
C-C
)是“为主要模式保留的”,这意味着定义主要模式的Lisp代码有权使用它(正如ScottFrazer所说,他们通常使用
C-C-C
)。当然,用户仍然有权绑定这样的密钥,但只需知道主要模式也可以自由绑定,因此您可能需要找到一个替换密钥来用于这些模式(请参见此处的答案)。请参阅Elisp手册,节点
关键绑定约定
@Drew我似乎找不到一个免费且易于访问的C-x绑定/对于我经常使用的复制和粘贴来说是有意义的。这个问题不是重复的,因为那里的答案不建议使用
添加挂钩
,但是OP声明他们使用了
addhook
,但它不起作用。将此问题标记为该问题的副本具有误导性。这个问题的答案在我的情况下不起作用,这就是我发布这个问题的原因。@Darsky:那就不要用前缀
C-x
。你还有很多钥匙。请参阅为用户保留密钥的手册,
密钥绑定约定。(您也可以绑定任何其他键,但它们可能会覆盖模式键等)并且您可以定义自己的前缀键:例如,您可以将
作为您自己的部分或全部键的前缀。
(add-hook 'python-mode-hook
          (lambda()
            (local-unset-key (kbd "C-c C-c"))))