X-Git-Url: http://nitlanguage.org diff --git a/misc/vim/plugin/nit.vim b/misc/vim/plugin/nit.vim index d1e92ef..b1b115b 100644 --- a/misc/vim/plugin/nit.vim +++ b/misc/vim/plugin/nit.vim @@ -253,6 +253,89 @@ fun NitOmnifunc(findstart, base) endif endfun +" Show doc for the entity under the cursor in the preview window +fun Nitdoc() + " Word under cursor + let word = expand("") + + " All possible docs (there may be more than one entity with the same name) + let docs = [] + + " Search in all metadata files + for file in ['modules', 'classes', 'properties'] + let path = NitMetadataFile(file.'.txt') + if empty(path) + continue + endif + + for line in readfile(path) + let words = split(line, '#====#', 1) + let name = get(words, 0, '') + if name =~ '^' . word + " It fits our word, get long doc + let desc = get(words,3,'') + let desc = join(split(desc, '#nnnn#', 1), "\n") + call add(docs, desc) + endif + endfor + endfor + + " Found no doc, give up + if empty(docs) || !(join(docs, '') =~ '\w') + return + endif + + " Open the preview window on a temp file + execute "silent pedit " . tempname() + + " Change to preview window + wincmd P + + " Show all found doc one after another + for doc in docs + if doc =~ '\w' + silent put = doc + silent put = '' + endif + endfor + + " Set options + setlocal buftype=nofile + setlocal noswapfile + setlocal syntax=none + setlocal bufhidden=delete + + " Change back to the source buffer + wincmd p + redraw! +endfun + +" Call `git grep` on the word under the cursor +" +" Shows declarations first, then all matches, in the preview window. +fun NitGitGrep() + let word = expand("") + let out = tempname() + execute 'silent !(git grep "\\(module\\|class\\|universal\\|interface\\|var\\|fun\\) '.word.'";'. + \'echo; git grep '.word.') > '.out + + " Open the preview window on a temp file + execute "silent pedit " . out + + " Change to preview window + wincmd P + + " Set options + setlocal buftype=nofile + setlocal noswapfile + setlocal syntax=none + setlocal bufhidden=delete + + " Change back to the source buffer + wincmd p + redraw! +endfun + " Activate the omnifunc on Nit files autocmd FileType nit set omnifunc=NitOmnifunc