是否可以创建一个 bash 别名,它能够提示我对一组目录进行制表符补全?
假设我有许多源代码控制的项目,每个项目的主路径位于~/projs/<projname>/trunk
现在,我创建了一个 Bash 别名,可以更方便地进行切换:
go-to <projname>
cd ~/projs/<projname>/trunk
无论我在文件系统中的位置如何,都会尝试。
是否有可能<projname>
在我编写时以某种方式获得选项卡完成提示go-to[space][Tab]
,以便我可以看到我有哪些可用的项目名称?
(这是最新的 Ubuntu 发行版)
答案1
这不是别名工作,它被称为可编程完成(有关详细信息,请参见 man bash)。最小完成示例bash
如下所示:
_go-to() {
COMPREPLY=( $(compgen -W "~/projs/proj1/trunk ~/projs/proj2/trunk" -- "${COMP_WORDS[COMP_CWORD]}") );
}
complete -F _go-to go-to
因此,首先我们创建一个函数_go-to
,然后将其绑定到名为 的命令go-to
。
现在go-to <tab>
将完成go-to /home/user/projs/proj
,另一个<tab>
将列出建议:
/home/user/projs/proj1/trunk /home/user/projs/proj2/trunk