13

我如何才能使 eshell 自动完成功能表现得像 Bash 和 Emacs 一样,即它提供了一个选择列表,而不是为你任意选择一个?

例如,如果我有两个目录“Download”和“Downloads”,当我键入“Down”并点击 TAB 时,我希望会弹出另一个缓冲区并向我显示选择。但是eshell只是为我完成了它,即如果我按TAB,它会完成“下载”;再次点击 TAB,它变为“下载”。

4

3 回答 3

6

用这个:

(add-hook
 'eshell-mode-hook
 (lambda ()
   (setq pcomplete-cycle-completions nil)))
于 2013-11-07T11:06:26.687 回答
6
(add-hook
 'eshell-mode-hook
 (lambda ()
   (setq pcomplete-cycle-completions nil)))

(setq eshell-cmpl-cycle-completions nil)

当我将我的 emacs 运行为“emacs -q”以避免我自己的自定义时,两者都按照您的要求进行操作并显示一个列出完成的缓冲区。这是 emacs 23.3,你运行的是旧版本吗?

另请参阅http://www.emacswiki.org/emacs/EshellCompletion,这是我第一次去检查的地方。

尝试这个的步骤:

  1. 使用“emacs -q”作为命令启动 emacs——没有其他参数。
  2. 更改为 *scratch* 缓冲区
  3. 粘贴或输入上述代码片段之一
  4. 将光标放在代码段的末尾,然后按“Ce”执行代码。
  5. 启动 eshell
  6. 测试
  7. 如果两者都不起作用,请在此处报告您的版本信息和任何其他相关详细信息
于 2013-11-07T15:47:12.957 回答
2

You only need to have the following line:

(setq eshell-cmpl-cycle-completions nil)

eshell-mode automatically set pcomplete-cycle-completions to the value of eshell-cmpl-cycle-completions locally.

于 2016-11-29T21:58:01.737 回答