I had these two questions about this function

" 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 = []

The intent is that I can just hit a hot key and auto complete a list from the file system.

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.'<-'
  echom 'adding to matches'
  echom '->'.item.'<-'
  call add(b:matches,item)
call complete(b:position, b:matches)
return ''
  • 3
    Can you maybe make your question a bit more clear? Pulling it out of the code might help get more people looking at it. – gabe. Nov 4 '12 at 17:20
  • thats fairly clear. I need to read a file into an array in a language thats 30 years old and I am a little out of practice with. – Arcabard Nov 4 '12 at 17:30

You can retrieve the filenames via glob(), like this, which offers all text files in your home directory for completion:

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

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

To strip off the path, I used fnamemodify(), which I map()'ed over the list.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.