Запустить завершение файла из vimscript - PullRequest
0 голосов
/ 26 апреля 2018

Возможно, ответ на мой вопрос очевиден, но даже после тщательного поиска я не могу найти ничего полезного.

В настоящее время я пишу небольшой плагин vim latex для автозаполнения, который предлагает дополнения на основе контекста редактирования. Соответствующая часть кода выглядит следующим образом:

function! Complete_latex(findstart, base)
    if a:findstart
        " locate the start of the base
        "....
    else
        if s:envname_required()
            return s:env_complete(a:base)
        endif

        if s:citation_required()
            return s:cite_complete(a:base)
        endif

        if s:filename_required()
            " TODO: Trigger filename completion
        endif
    endif
endfunction

set omnifunc=Complete_latex

Функции *_required() в основном генерируют кучу регулярных выражений в текущей строке, которую я редактирую, чтобы выяснить, что я делаю сейчас. Поэтому, если я нахожусь в режиме INSERT в позиции, подобной ... \ input {| ... Я бы хотел, чтобы мой omnifunc вызвал то же самое завершение, которое я могу запустить с помощью C-X C-F в режиме INSERT.

Поскольку я также использую плагин YouCompleteMe и устанавливаю { в качестве триггера для семантического завершения в * .tex файлах, об этом заботятся.

Я знаю, что могу сам получить список файлов и заполнить всплывающее меню, но мне все же было интересно, смогу ли я использовать встроенную функцию vim.

Спасибо.

1 Ответ

0 голосов
/ 26 апреля 2018

Я не совсем уверен, что это лучший путь, но я придумал

let l:glob_pattern = a:base . '*' 

let l:files_pre = globpath('.', l:glob_pattern, 0, 1)
let l:files_post = []

for l:file in l:files_pre
     call add(l:files_post, substitute(l:file, '^\./', '', ''))
endfor

return l:files_post

Который в основном получает все файлы в текущем каталоге, соответствующие «base *», и возвращает их список. Часть постобработки просто удаляет «./» в начале каждого имени файла, возвращаемого globpath

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...