在 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 的自定义组中看到任何其他选项。如何使所选选项移动而不是整个列表旋转?
这适用于 emacs 26.1,内置 ido。
编辑: 使用常规 ido 模式,我可以按以下方式覆盖下一个、上一个键绑定(bind):
(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 让我覆盖键吗?
最佳答案
好的,找到答案了。 ido-grid-mode 包确实是我需要的,谢谢@jpkotta。有一个技巧可以让我的键绑定(bind)工作。
(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 必须在 为键绑定(bind)添加设置 Hook 之前启动。我是在设置 Hook 之后或完全在设置 Hook 之外做的,但它不起作用。
EDIT :忘了说了,还有一个技巧。破解 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))
关于emacs - 如何让 emacs 不旋转整个选项列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51153863/