У меня есть каталоги, полные файлов с тем же префиксом, который я хочу быстро открыть в 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
Буду очень признателен за любые идеи о том, как заставить его добавить пробел после завершения имени файла, но не после завершения префикса.