【发布时间】:2013-10-19 22:01:32
【问题描述】:
我创建了一个自定义键绑定宏,如下所示:
(global-set-key (kbd "C-C C-c") "\C-a\C- \C-n\M-w\C-y")
问题是C-c C-c 是在python-mode 中为python-send-buffer 定义的。所以我的宏适用于除python模式之外的所有模式。我假设python-mode 在我的初始化文件之后被评估,所以它会覆盖那个键绑定。
我尝试使用(eval-after-load "python-mode") 和global-unset-key 取消设置C-c C-c,但这不起作用。 python 中的C-c C-c 总是映射到python-send-buffer。
我怎样才能完全禁用 Python 的 C-c C-c,而改用我的宏?
我使用的是 Emacs 24.2.1。
【问题讨论】:
-
C-c C-c 定义了很多模式。也许你应该考虑stackoverflow.com/questions/683425/…
-
或者只是考虑使用不同的密钥。
C-c后跟一个控制键(例如C-c)是“为主要模式保留的”,这意味着定义主要模式的 Lisp 代码有权使用它(并且他们经常使用C-c C-c,正如 ScottFrazer 所说)。当然,用户仍然有权绑定这样的密钥,但只知道主要模式也可以随意这样做,因此您可能需要找到用于此类模式的替换密钥(请参阅此处的答案) .请参阅 Elisp 手册,节点Key Binding Conventions。 -
@Drew 我似乎找不到免费且易于访问的 C-x 绑定/对于我经常使用的复制和粘贴有意义。
-
这个问题与stackoverflow.com/questions/13965966/unset-key-binding-in-emacs 不重复,因为那里的答案不建议使用
add-hook,但OP 声明他们使用了add-hook,但它不起作用。将此问题标记为该问题的重复项具有误导性。该问题的答案在我的情况下不起作用,这就是我发布此问题的原因。 -
@Darsky:那么不要为此使用前缀
C-x。您仍然有很多可用的密钥。请参阅手册Key Binding Conventions,其中为用户保留了密钥。 (您也可以绑定任何其他键,但它们可能会覆盖模式键等。)您可以定义自己的前缀键:例如,您可以将<f8>设为您自己的部分或全部键的前缀。跨度>
标签: emacs key-bindings emacs24 python-mode