【问题标题】:Emacs Unbind a Mode's KeyBinding [duplicate]Emacs取消绑定模式的KeyBinding [重复]
【发布时间】: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


【解决方案1】:
(add-hook 'python-mode-hook
          (lambda()
            (local-unset-key (kbd "C-c C-c"))))

【讨论】:

    【解决方案2】:

    应该这样做:

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

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多