" Find the column where the completion starts. This must be between 1 and " col('.'). Denote links are of this form: `denote:`. function s:column() " Get the substring from the start of the line until col('.') let l = getline(".")[:col('.')] " Take the shortest prefix of a denote link. This may be any of " \matchstrpos('\= 0 return res[1] endif let res = l->matchstrpos('\matchstr('^denote:\zs.*$') let flist = glob(prefix ? "*" .. prefix .. "*" : "*", 0, v:true) let res = [] for filename in flist let noteId = denote#meta#noteIdFromFile(filename) let noteTitle = denote#meta#noteTitleFromFile(filename) if noteId == v:false || (noteId !~ '^' .. prefix && noteTitle !~ prefix) continue endif let noteTitle = noteTitle ?? '(no title)' let noteTags = denote#meta#noteTagsFromFile(filename) let res = res->add({ \ 'word' : 'denote:' .. noteId, \ 'abbr' : noteTitle, \ 'menu' : noteTags->join(', ') \ }) endfor return res endfunction function! Myomni(findstart, base) if a:findstart == 1 let tmp = s:column() return tmp else let tmp = s:suggestions(a:base) return tmp endif endfunction " Completion function for denote links function denote#completion#get(findstart, base) return a:findstart == 1 ? s:column() : s:suggestions(a:base) endfunction