50 lines
1.5 KiB
VimL
50 lines
1.5 KiB
VimL
let s:matches = system('systemd --dump-configuration --no-pager | grep -o -P "(^\w+[=])|([\[]\w+[\]])"')
|
|
let s:matches = split(s:matches, "\n")
|
|
let s:allkeys = system('systemd --dump-configuration --no-pager | grep -o -P "(^[\[]\w+[\]])" | sed -e "s/[]]//g"')
|
|
let s:allkeys = split(s:allkeys, "\n")
|
|
"let g:AutoPairs = {'(':')', '{':'}',"'":"'",'"':'"', '`':'`'}
|
|
"let g:asyncomplete_triggers = {'*': ['.', '>', ':', '['] }
|
|
|
|
function s:get_key()
|
|
let l:line = search('[\w*\]', "bnW")
|
|
if l:line == 0
|
|
return 0
|
|
endif
|
|
let l:key = getbufline(bufnr("%"), l:line)[0]
|
|
return l:key
|
|
endfunction
|
|
|
|
function s:get_matches()
|
|
let l:key = s:get_key()
|
|
if l:key == 0
|
|
let l:from = index(s:matches, l:key) + 1
|
|
let l:until = match(s:matches, '\[\w\+\]', l:from)
|
|
let l:until = l:until - 1
|
|
return s:matches[l:from:l:until]
|
|
endif
|
|
return s:allkeys
|
|
endfunction
|
|
|
|
function! s:systemd_completor(opt, ctx) abort
|
|
let l:col = a:ctx['col']
|
|
let l:typed = a:ctx['typed']
|
|
if match(l:typed, '[') != -1
|
|
let l:matches = s:allkeys
|
|
else
|
|
let l:matches = s:get_matches()
|
|
endif
|
|
echom l:typed
|
|
let l:kw = matchstr(l:typed, '\v\S+$')
|
|
let l:kwlen = len(l:kw)
|
|
let l:startcol = l:col - l:kwlen
|
|
let l:startcol = 1
|
|
call asyncomplete#complete(a:opt['name'], a:ctx, l:startcol, l:matches)
|
|
echo 'done'
|
|
endfunction
|
|
|
|
au User asyncomplete_setup call asyncomplete#register_source({
|
|
\ 'name': 'systemd',
|
|
\ 'allowlist': ['systemd'],
|
|
\ 'completor': function('s:systemd_completor'),
|
|
\ })
|