From 1a5b62238cd89cf965beb081cb2292bab74c4502 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Thu, 10 Sep 2009 18:41:36 -0500 Subject: [PATCH] vim plugin for factor, with shortcuts for opening vocabs and switching between implementation, docs, and tests --- misc/vim/plugin/factor.vim | 60 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 misc/vim/plugin/factor.vim diff --git a/misc/vim/plugin/factor.vim b/misc/vim/plugin/factor.vim new file mode 100644 index 0000000000..c949666a39 --- /dev/null +++ b/misc/vim/plugin/factor.vim @@ -0,0 +1,60 @@ +nmap fi :FactorVocabImpl +nmap fd :FactorVocabDocs +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() + +function! FactorVocabRoot(root) + let cwd = getcwd() + exe "lcd " fnameescape(g:FactorRoot) + let vocabroot = fnamemodify(a:root, ":p") + exe "lcd " fnameescape(cwd) + return vocabroot +endfunction + +function! FactorVocabFile(root, vocab) + let vocabpath = substitute(a:vocab, "\\.", "/", "g") + let vocabfile = FactorVocabRoot(a:root) . vocabpath . "/" . fnamemodify(vocabpath, ":t") . ".factor" + + if getftype(vocabfile) != "" + return vocabfile + else + return "" + endif +endfunction + +function! GoToFactorVocab(vocab) + for root in g:FactorVocabRoots + let vocabfile = FactorVocabFile(root, a:vocab) + if vocabfile != "" + exe "edit " fnameescape(vocabfile) + return + endif + endfor + echo "Vocabulary " vocab " not found" +endfunction + +function! FactorFileBase() + let filename = expand("%:r") + let filename = substitute(filename, "-docs", "", "") + let filename = substitute(filename, "-tests", "", "") + return filename +endfunction + +function! GoToFactorVocabImpl() + exe "edit " fnameescape(FactorFileBase() . ".factor") +endfunction + +function! GoToFactorVocabDocs() + exe "edit " fnameescape(FactorFileBase() . "-docs.factor") +endfunction + +function! GoToFactorVocabTests() + exe "edit " fnameescape(FactorFileBase() . "-tests.factor") +endfunction