同じプレフィックスを持つファイルでいっぱいのディレクトリがあり、vimですばやく開くことができます。たとえば、次のような場合があります。
$ ls *
bar:
bar_10 bar_20 bar_30
foo:
foo_10 foo_20 foo_30
私が望むのは、これらのディレクトリのいずれかにいて、次のように入力できるようにすることです。
$ vim <TAB>
そして、次のようにオートコンプリートします。
$ vim bar_
これを達成するために、「bar_」を含む「.completion」という名前のディレクトリごとのファイルを用意できてうれしく思います。
私が抱えている問題は、次の動作が必要なことです。
* "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
ファイル名の完了後にスペースを追加する方法についてのアイデアはありますが、プレフィックスの完了後ではありません。