我的目录充满了具有相同前缀的文件,我希望能够在 vim 中快速打开这些文件。例如,我可能有:
$ ls *
bar:
bar_10 bar_20 bar_30
foo:
foo_10 foo_20 foo_30
我想要的是能够在这些目录之一中并输入:
$ vim <TAB>
它会自动完成:
$ vim bar_
为了实现这一点,我很高兴每个目录都有一个名为“.completion”的文件,其中包含“bar_”。
我遇到的问题是我想要以下行为:
* "vim <TAB>" --> "vim bar_" // no space
* "vim bar_1" --> "vim bar_10 " // space
地点 | 是光标,因此如果文件匹配,则在末尾添加空格。如果我们匹配前缀,请不要添加空格。
到目前为止,我最好的是这种行为减去最后添加的空格。我尝试了各种方法,都无济于事。以下是我所拥有的:
_vim()
{
local cur opts
local -a toks
cur="${COMP_WORDS[COMP_CWORD]}"
if [ -f .completion ]; then
opts=`cat .completion`
if [[ ${opts} = ${cur} ]]; then
toks=( $(compgen -f ${cur} | sed -e 's/$/ /') )
else
if [[ -z ${cur} ]]; then
toks=( $(compgen -W "${opts}" -- ${cur}) )
else
toks=( $(compgen -f ${cur} | sed -e 's/$/ /') )
fi
fi
else
toks=( $(compgen -f ${cur} | sed -e 's/$/ /') )
fi
COMPREPLY=( "${toks[@]}" )
}
complete -F _vim -o nospace vim
任何关于如何让它在文件名完成后添加空格的想法,但不是在前缀完成后添加空格,将不胜感激。