在 bash 或 zsh 中设置路径的制表符补全以类似于 tcsh

Oli*_*ler 5 bash zsh tcsh tab-completion

我\xe2\x80\x99m是tcsh的长期用户,但现在所有的酷孩子似乎都在使用bash或zsh(也就是说,git或其他东西的完成模式可用于bash和zsh,很少用于tcsh)。

\n\n

我的问题是,两个 shell 都有关于路径制表符补全的行为,这让我发疯,而且 I\xe2\x80\x99m 很难找到如何将它们更改为我喜欢的方式。

\n\n

这里\xe2\x80\x99s 是我\xe2\x80\x99m 过去在 tcsh 中所做的一些与其他人不同的操作的示例:

\n\n
    \n
  • /u<TAB>完成到/usr/
  • \n
  • 然后选项卡列出的内容/usr/
  • \n
  • /usr/li<TAB>完成/usr/lib并列出lib/libexec/
  • \n
  • 第二次按 Tab 键完成/usr/lib/
  • \n
  • 第三次按 Tab 键会列出以下内容/usr/lib/
  • \n
\n\n

在 bash 中,无论我点击多少次 tab,它都不会过去/usr/lib,需要我输入斜杠,而我不想这样做。

\n\n

在 zsh 中,/usr/li<TAB>首先完成 to /usr/lib,然后另一个选项卡列出lib/libexec/,第三次选项卡完成 to /usr/lib/,所有后续选项卡在/usr/lib/和 之间循环/usr/libexec/。我不知道如何度过这一点。我只想从/usr/li/usr/lib,然后/usr/lib/,然后列出其内容。

\n\n

对于Python来说也是如此。在 tcsh 中,我输入pyt<TAB>,它完成python并列出python, python2.5,python2.6等,然后第二个选项卡用于 python 并添加空格。在 bash 中,它要求我输入空格,而在 zsh 中,它会像第一个示例一样无限循环。

\n\n

任何驯服这些贝壳的帮助将不胜感激。我不想\xe2\x80\x99t真的想花时间调整这些shell的其他方面,直到解决上面的问题。

\n

Gil*_*il' 2

准确地描述您的要求做得很好,但如果存在歧义,我不确定我是否真正理解您想要做什么,例如/usr/lib,在您期望Tab密钥做什么之后。

\n\n

如果我尝试 tcsh,之后/usr/libTab密钥仅列出liblibexec。您可以在 zsh 中使用 重现此效果setopt no_auto_menu,但这可能会以您在其他情况下不喜欢的方式改变行为。如果您也这样做setopt rec_exact,则行为看起来就像您所描述的那样:after /usr/liTabinserts b、然后另一个Tabinserts/和第三个列出 中的完成/usr/lib/

\n\n

zsh 补全选项记录man zshoptions.

\n