简体   繁体   中英

Trigger file completion from vimscript

probably the answer to my question is obvious but even after a straight our of searching I cannot find anything useful.

I'm currently writing a small vim latex auto-completion plugin that suggests completions based on the editing context. The relevant part of the code looks like this:

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

The *_required() functions basically throw a bunch of regexps at the current line I'm editing to figure out what I'm doing right now. So if I am in INSERT mode at a position like ...\\input{|... I'd like my omnifunc to call the same completion I can trigger with CX CF in INSERT mode.

As I also use the YouCompleteMe plugin and set { as a trigger for semantic completion in *.tex files, the triggering is being take care of.

I know that I can get a list of files and fill the popup menu myself, but I was nevertheless wondering If I can use a builtin function of vim.

Thank you.

I'm not entirely sure if that is the best way to go, but I came up with

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

Which basically gets all files in the current directory matching "base*" and returns a list of them. The post processing part just removes the './' at the beginning of each filename returned by globpath

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM