我创建了一个名为memo
的命令,代码如下:
memo() {
vi $HOME/memo/$1
}
我希望将bash-completion应用到我的memo
中,以便打开已经在$HOME/memo
目录中的文件:
$ memo [TAB] # to show files in $HOME/memo
$HOME/memo
包含一个目录,所以仅列出 memo
下的文件是不够的。
换句话说,我想将应用于 $HOME/memo
的 ls
命令应用到 memo
中:
$ ls [TAB]
foo.md bar/
我尝试了下面的方法,但对于嵌套目录无效:
_memo() {
local cur
local files
_get_comp_words_by_ref -n : cur
files=$(ls $MEMODIR)
COMPREPLY=( $(compgen -W "${files}" -- "${cur}") )
}
complete -F _memo memo
MEMODIR=$HOME/memo
_cd()
函数有一个$CDPATH
变量,正好满足我的需求。 - Benjamin Goodacre