emacs - 由 global-set-key 屏蔽的 ido-mode 绑定(bind)

标签 emacs elisp

堆栈溢出!在过去的几天里,我试图对我的 emacs 进行一些定制,但遇到了我不知道如何解决的问题。

我要做的是定义一个全局键绑定(bind)和一个 ido 模式键绑定(bind),它们将使用相同的键来做不同的事情。

Ido-mode 键绑定(bind)是这样定义的:

(defun ido-my-keys ()
  "Add my keybindings for ido."
  (define-key ido-completion-map (kbd "M-<return>") 
    'ido-invoke-in-vertical-split)
  )

(add-hook 'ido-setup-hook 'ido-my-keys)

它工作正常,直到我将以下行放在我的 .emacs 文件中:
(global-set-key (kbd "M-<return>") 'insert-newline-and-indent)

有了这一行,M-return 甚至从 ido-switch-buffer 调用 insert-newline-and-indent。有趣的是,当我以交互方式使用 global-set-key 时(即不是来自 init-file 而是来自 M-x 调用),一切都按预期工作。

谢谢你的帮助。对不起我的英语不好。

问题出在我打开的 ergoemacs 模式下。此模式为导致此效果的 global-set-key 定义了一个建议。

我通过将 global-set-key 调用移到 ergoemacs 初始化之上来解决了这个问题。不是最好的解决方案,而是一个简单的解决方案。

最佳答案

该问题是由 ergoemacs-keybindings 包引起的,或者更具体地说,是由 ergoemacs-mode.el 引起的

这个包为 global-set-key 定义了一个建议,实际上,用它自己的 ergoemacs-global-set-key 替换它。但是由于 ergoemacs 是一种次要模式,它的键映射比全局映射具有更高的优先级,因此覆盖了 ido 次要模式的键绑定(bind)。

我看到了该问题的三个解决方案:

  • ergoemacs-mode.el 中的注释建议。
  • 在打开 ergoemacs-mode 之前使用 global-set-key。
  • 等待 ergoemacs 作者修复错误 ;)
  • 关于emacs - 由 global-set-key 屏蔽的 ido-mode 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9877557/

    相关文章:

    cocoa - 如何在 .emacs 文件中检测 Cocoa Emacs?

    emacs - 添加到列表 'load-path doesn' t 似乎工作

    emacs - 在退出全屏时在 Emacs 中设置帧大小

    Emacs 每帧制作 ibuffer 过滤器

    emacs - elisp ,将函数作为参数传递并调用它,发生 Eval 错误,为什么?

    emacs - 替代前向词/后向词以包含符号——例如,***

    git - 当外部修改文件时,为什么在 emacs 中重新加载通知很慢?

    emacs - 在哪里可以找到Emacs Helm文档

    windows - windows下设置emacs字体

    emacs - 评估 dir locals 中的值