使eshell标签完成的行为类似于Bash

时间:2013-11-07 08:38:47

标签: emacs eshell

如何让eshell自动完成功能像Bash和Emacs一样,即它提供一个选择列表而不是任意选择一个?

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

3 个答案:

答案 0 :(得分:6)

使用此:

(add-hook
 'eshell-mode-hook
 (lambda ()
   (setq pcomplete-cycle-completions nil)))

答案 1 :(得分: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 * buffer
  3. 粘贴或输入上述代码段之一
  4. 将光标放在摘录的末尾,然后按“C-e”执行代码。
  5. 启动eshell
  6. 测试
  7. 如果两者都不起作用,请在此处报告您的版本信息和任何其他相关详细信息

答案 2 :(得分:2)

您只需要拥有以下一行:

(setq eshell-cmpl-cycle-completions nil)

eshell-mode会自动将pcomplete-cycle-completions设置为本地eshell-cmpl-cycle-completions的值。