shell函数中的自动完成函数参数

时间:2013-08-29 16:21:26

标签: bash shell zsh

有一些快速bash功能,让我可以访问我经常使用的文件夹:

function dp() {
    cd ~/Development/Personal/$1
}

function dw() {
    cd ~/Development/Work/$1
}

所以我可以输入dp some-project直接转到个人项目。如果我可以在函数参数上使用制表符完成工作,这将是一个杀手,因此它会自动从我要导航到的目录中提取文件名,但我似乎无法弄明白......

理想情况下,我只需键入dp b{tab}并获取dp blog,其中blog~/Development/Personal/目录中的文件夹。

任何人都知道如何使这项工作?如果重要的话,我正在使用ZSH!

1 个答案:

答案 0 :(得分:4)

你正在使用哪种外壳非常重要。

首先,我要提一下,您可以将常用目录添加到“热门列表”中,然后可以将其与cd一起使用。例如,你可以这样做:

cdpath=(~/Development/Personal ~/Development/Work)

然后,在任何时候(以及任何目录),您都应该能够输入cd blog。标签完成也可以。

如果您仍希望为cd拥有自己的功能并为其添加标签已完成,请参阅a very informative article,了解如何编写自己的完成功能。

简而言之,您在zsh完成目录中创建了一个名为_dp的文件,并添加了类似的内容:

#compdef dp

compadd $(command ls -1 $HOME/Development/Personal 2>/dev/null --color=none | sed -e 's/ /\\ /g')