在emacs ido选项中,当前选择的选项始终始终显示在列表中。当我们改变时按箭头键或C-s / C-r:整个列表旋转,而不是当前选择的选项移动到任何地方。这对我来说非常令人不安。为了说明这一点,假设A,B,C和D是缓冲区,我们正在运行ido-switch-buffer
* A * B C D
按C-s
* B * C D A
再次按C-s
* C * D A B
* A * B C D
按C-s
A * B * C D
再次按C-s
A B * C * D
我尝试将“ ido-rotate”和“ ido-rotate-file-list-default”分别设置为nil和t,但都没有改变。我也没有在ido的customize-group中看到任何其他选项。如何使选定的选项移动而不是旋转整个列表?
这是针对内置ido的emacs 26.1。
编辑: 在常规ido模式下,我可以按以下方式覆盖下一个先前的键绑定:
(define-key ido-buffer-completion-map (kbd "M-)") 'ido-next-match)
使用ido-grid-mode,我所有的尝试都失败了。似乎坚持使用硬编码键集来查找下一个选项/上一个选项。 这也不起作用:
(define-key ido-completion-map (kbd "M-)") 'ido-next-match)
任何提示我都可以使ido-grid-mode让我覆盖键吗?
答案 0 :(得分:0)
好,找到答案了。软件包ido-grid-mode确实是我需要的,谢谢@jpkotta。有一个技巧可以使我的键盘绑定工作。
(defun ido-my-keys ()
"Add my keybindings for Ido."
(define-key ido-completion-map (kbd "M-)") 'ido-next-match)
(define-key ido-completion-map (kbd "M-)") 'ido-prev-match)
)
(ido-grid-mode t)
(add-hook 'ido-setup-hook 'ido-my-keys)
也就是说-必须在添加设置挂钩以进行键绑定之前启动ido-grid-mode。我在安装挂钩之后或完全在安装挂钩之外进行了此操作,这不起作用。
编辑:忘了提,还有另一个技巧。破解ido-grid-mode本身。在ido-grid-mode.el中进行以下更改:
;; ('C-s (define-key ido-completion-map (kbd "C-s") #'ido-grid-mode-next))
;; ('C-r (define-key ido-completion-map (kbd "C-r") #'ido-grid-mode-previous))
('C-s (define-key ido-completion-map (kbd "M-)") #'ido-grid-mode-next))
('C-r (define-key ido-completion-map (kbd "M-(") #'ido-grid-mode-previous))