2012-03-26 84 views
5

stackoverflow!在过去的几天里,我试图定制我的emacs,并且遇到了我不知道如何处理的问题。由全局设置密钥屏蔽的ido模式绑定

我想要做的就是定义一个全局键绑定,并且将使用相同的密钥做不同的事情的IDO模式键联结。

伊多模式键联结的定义是这样的:

(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-回报甚至从ido-switch-buffer调用insert-newline-and-indent。有趣的是,当我交互地使用global-set-key(即不是从init-file而是从M-x调用)时,一切都按预期工作。

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


问题原来是我打开的ergoemacs模式。此模式为导致此效应的全局设置键定义建议。

我通过移动上面的ergoemacs初始化的全局设置键通话解决了这个问题。不是最好的解决方案,而是简单的解决方案。

+0

我不能重现这一点。顺便说一句'ido-invow-in-vertical-split'不是内置的函数,我不得不为它的谷歌。 https://gist.github.com/493269 – kindahero 2012-03-26 18:45:00

+0

我很抱歉,这种默默无闻。无论如何,这个函数似乎并没有涉及到这个问题:把它改成别的东西(例如ido-exit-minibuffer)不会改变效果。 – campugnatus 2012-03-26 18:51:19

+0

您使用的是哪个版本的Emacs?我也无法重现这个问题(在Emacs 24.0.94中)。 – phils 2012-03-26 20:25:08

回答

3

问题是由ergoemacs-键绑定包引起的,或者,更具体,由ergoemacs-mode.el

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

我看到三种解决这个问题:在ergoemacs-mode.el

  1. 注释掉的建议。
  2. 在打开ergoemacs模式之前使用全局设置键。
  3. 等待ergoemacs作者修复该错误;)