From 5e4751db64ab0ebbec602f669e686c7c72f18815 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Thu, 10 Sep 2009 20:24:56 -0500 Subject: [PATCH] completion for :FactorVocab vim function --- misc/vim/plugin/factor.vim | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) 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"