bash自动完成

时间:2011-11-07 01:53:04

标签: linux shell ubuntu

bash(1)中的命令完成非常方便;我非常喜欢这个功能。但我有一个问题。

例如,我们在Documents目录中都有Downloads$HOME

因此,如果我输入cd ~然后按 TAB ,它将遍历$HOME下的所有目录。当Documents出现并且shell现在显示cd ~/Documents时,我想深入了解此目录。例如,work中有一个Documents目录。我的目的是cdwork目录。

那我该怎么办?

我通常输入一个w然后按 TAB ,但是当这个动作重复太多时我发现它很烦人。有时我不确切知道这个目录下的文件是什么。

你有什么好主意吗?

ps:事实上,当我使用vim时,我遇到了这个问题。我输入:e然后 TAB ,它将循环子文件夹,我发现停止循环并进入下一级别的唯一方法是输入/。所以路径最后有两个'/'。

3 个答案:

答案 0 :(得分:3)

您可以将shell切换到ZShell,这样您就可以在不键入第一个字母的情况下浏览目录。

例如,您可以输入

cd ~/

TAB 将显示所有子文件夹的列表(如bash中),但多次按 TAB 将允许您循环浏览子文件夹。按 - > / 键将允许您在该目录中启动制表符,依此类推。

您有时可以使用chsh(man chsh获取更多信息)来更改您的shell,如果它是您自己的个人计算机,或者您的网络可能有一种特殊的方式来更改您的shell。您可能还希望Google使用一些常见的.zshrc / .zshenv设置,或者迁移旧的.bashrc / .cshrc / .profile设置。

Zsh还有办法为其他任务设置TAB完成,例如,它可以根据那些尚未在SVN中的文件来完成svn文件(对于svn add)。要获得这些功能,请添加

autoload -U compinit
compinit

到你的.zshrc文件。有很多方法可以在zsh中自定义TAB完成(例如,不区分大小写,或者对不同程序的参数),但如果您对这些方法感兴趣,可以通过搜索找到比我所知的更多信息。 / p>

答案 1 :(得分:2)

就像Jack Toole的zsh建议(这是一个非常精细的shell),如果你必须使用bash,你可以在你的.bashrc中坚持使用相同的“继续点击 tab 循环可能性“功能:

test -n "$PS1" && bind TAB:menu-complete

还有一个名为bash-completion的项目除路径名完成外还提供了许多其他类型的完成。

答案 2 :(得分:0)

如果你不知道目录中的内容,只需再次按 TAB