diff --git a/misc/vim/plugin/factor.vim b/misc/vim/plugin/factor.vim index c949666a39..cac7f3939b 100644 --- a/misc/vim/plugin/factor.vim +++ b/misc/vim/plugin/factor.vim @@ -5,10 +5,10 @@ nmap ft :FactorVocabTests let g:FactorRoot = "/Users/joe/Documents/Code/others/factor" let g:FactorVocabRoots = ["core", "basis", "extra", "work", "/Users/joe/Documents/Code/Factor"] -command! -nargs=1 FactorVocab :call GoToFactorVocab("") -command! FactorVocabImpl :call GoToFactorVocabImpl() -command! FactorVocabDocs :call GoToFactorVocabDocs() -command! FactorVocabTests :call GoToFactorVocabTests() +command! -nargs=1 -complete=custom,FactorCompleteVocab FactorVocab :call GoToFactorVocab("") +command! FactorVocabImpl :call GoToFactorVocabImpl() +command! FactorVocabDocs :call GoToFactorVocabDocs() +command! FactorVocabTests :call GoToFactorVocabTests() function! FactorVocabRoot(root) let cwd = getcwd() @@ -18,6 +18,21 @@ function! FactorVocabRoot(root) return vocabroot endfunction +function! FactorCompleteVocab(arglead, cmdline, cursorpos) + let vocabs = "" + let vocablead = substitute(a:arglead, "\\.", "/", "g") + for root in g:FactorVocabRoots + let vocabroot = FactorVocabRoot(root) + let newvocabs = globpath(vocabroot, vocablead . "*") + if newvocabs != "" + let newvocabs = substitute(newvocabs, "\\(^\\|\\n\\)\\V" . escape(vocabroot, "\\"), "\\1", "g") + let newvocabs = substitute(newvocabs, "/\\|\\\\", ".", "g") + let vocabs .= newvocabs . "\n" + endif + endfor + return vocabs +endfunction + function! FactorVocabFile(root, vocab) let vocabpath = substitute(a:vocab, "\\.", "/", "g") let vocabfile = FactorVocabRoot(a:root) . vocabpath . "/" . fnamemodify(vocabpath, ":t") . ".factor"