vim은 사용자 정의 목록을 자동 완성합니다.

vim은 사용자 정의 목록을 자동 완성합니다.

이 기능에 대해 두 가지 질문이 있습니다.

" how do I load a file into a list here?
" set some variable  

func! CustomComplete() 


" and then read the variable here so that b:list = a \n split file ?
let b:list = ["spoogle","spangle","frizzle"]
let b:matches = []

목적은 단축키를 눌러 파일 시스템의 목록을 자동 완성할 수 있다는 것입니다.


inoremap <F5> <C-R>=CustomComplete()<CR>

" how do I load a file into a list?
func! CustomComplete()

echom 'select word under cursor'
let b:word = expand('<cword>')
echom '->'.b:word.'<-'
echom 'save position'
let b:position = col('.')
echom '->'.b:position.'<-'
normal e
normal l
echom 'move to end of word'

" and then read the list here?
let b:list = ["spoogle","spangle","frizzle"]
let b:matches = []


echom 'begin checking for completion'
for item in b:list
echom 'checking '
echom '->'.item.'<-'
  if(match(item,'^'.b:word)==0)
  echom 'adding to matches'
  echom '->'.item.'<-'
  call add(b:matches,item)
  endif
endfor
call complete(b:position, b:matches)
return ''
    endfunc

답변1

glob()아래와 같이 파일 이름을 검색하여 이 작업을 수행할 수 있으며 , 이는 완료를 위해 홈 디렉터리의 모든 텍스트 파일을 제공합니다.

inoremap <F5> <C-R>=ListFiles()<CR>

func! ListFiles()
    let files = map(split(glob('~/*.txt'), "\n"), 'fnamemodify(v:val, ":t")')
    call complete(col('.'), files)
    return ''
endfunc

경로를 없애기 위해 를 사용하여 목록에 fnamemodify()넣었습니다 .map()

관련 정보