Посмотрите детали :h complete-functions
и :h 'completefunc'
.
Или погрузитесь в код ниже:
" Scan current buffer for everithing in { }.
fun! GetRegexes()
let rx = '{.\+}'
let res = []
for line in getline(1, '$')
if line =~ rx
call add(res, matchstr(line, rx))
endif
endfor
return res
endfun
fun! MyComplete(findstart, base)
if a:findstart
" locate the start of the completion
let line = getline('.')
let start = col('.') - 1
while start > 0 && line[start] !~ '{'
let start -= 1
endwhile
return start
else
let res = []
for m in GetRegexes()
if m =~ '^' . a:base
call add(res, m)
endif
endfor
return res
endif
endfun
set completefunc=MyComplete
finish
[0-9] {printf("yada yada \n");}
[0-9] {printf("yada \n");}
Если вы сохраните этот файл как compl.vim
и отправите его с помощью команды :so %
, тогда вы сможете начать ввод {pri
и нажать Ctrl - X Ctrl - U , чтобы вызвать меню завершения из 2 элементов:
{printf("yada yada \n");}
{printf("yada \n");}
Полагаю, вы можете настроить его под свои нужды.
Вы можете сохранить 2 функции в вашем .vimrc и установить для Completefunc значение MyComlete
для буфера, в котором вам необходим такой вид завершения.