如何使 eshell 自动完成行为像 Bash 和 Emacs 一样,即它提供了一个选项列表,而不是为你随意选择一个?
例如,如果我有两个目录"下载"和"下载",当我键入"向下"并按 TAB 时,我希望会弹出另一个缓冲区并显示选项。但是 eshell 只是为我完成它,即如果我按 TAB,它就会完成"下载";再次点击 TAB,它更改为"下载"。
使用这个:
(add-hook
'eshell-mode-hook
(lambda ()
(setq pcomplete-cycle-completions nil)))
(add-hook
'eshell-mode-hook
(lambda ()
(setq pcomplete-cycle-completions nil)))
和
(setq eshell-cmpl-cycle-completions nil)
两者都按照您的要求进行操作,并显示一个缓冲区,列出当我以"emacs -q"运行我的 emacs 时完成的情况,以避免我自己的自定义。这是 emacs 23.3,你运行的是旧版本吗?
另请参阅 http://www.emacswiki.org/emacs/EshellCompletion 这是我第一次去查看的地方。
尝试此操作的步骤:
- 使用 'emacs -q' 作为命令启动 emacs——没有其他参数。
- 更改为*暂存*缓冲区
- 粘贴或键入上述代码片段之一
- 将光标放在代码段的末尾,然后按"C-e"执行代码。
- 启动 eshell
- 测试
- 如果两者都不起作用,请在此处报告您的版本信息和任何其他相关详细信息
您只需要以下行:
(setq eshell-cmpl-cycle-completions nil)
eshell-mode
自动将pcomplete-cycle-completions
设置为本地eshell-cmpl-cycle-completions
的值。