由global-set-key掩盖的ido-mode绑定

cam*_*tus 5 emacs elisp

堆栈溢出!在过去的几天里,我试图稍微定制我的emacs,我遇到了一个我不知道如何处理的问题.

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

Ido-mode键绑定以这种方式定义:

(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)
Run Code Online (Sandbox Code Playgroud)

它工作正常,直到我将以下行放在我的.emacs文件中:

(global-set-key (kbd "M-<return>") 'insert-newline-and-indent)
Run Code Online (Sandbox Code Playgroud)

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

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


问题原来是我打开的ergoemacs模式.此模式定义了导致此效果的global-set-key的建议.

我通过在ergoemacs初始化之上移动global-set-key调用来解决问题.不是最好的解决方案,而是简单的解决方案.

cam*_*tus 3

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

该包定义了 global-set-key 的建议,事实上,它用自己的 ergoemacs-global-set-key 替换了它。但由于 ergoemacs 是次要模式,因此它的键盘映射比全局映射具有更高的优先级,从而覆盖 ido 次要模式的键绑定。

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

  1. ergoemacs-mode.el 中的注释掉建议。
  2. 在打开 ergoemacs-mode 之前使用 global-set-key。
  3. 等待 ergoemacs 作者修复该错误;)