From 33a596ef3e0dbe879675baa289b3457f954a195a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Fri, 6 Mar 2015 23:21:55 -0500 Subject: [PATCH] misc/vim: add a function to show the doc of the entity under the cursor MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- misc/README.md | 12 ++++++++++ misc/vim/plugin/nit.vim | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/misc/README.md b/misc/README.md index 181c047..1a7b97f 100644 --- a/misc/README.md +++ b/misc/README.md @@ -37,6 +37,7 @@ Ensure that `~/.vimrc` contains * Automatic indentation * Syntax checker (require [Syntastic][2]). * Autocomplete for whole projects using module importations + * Show documentation in preview window [2]: https://github.com/scrooloose/syntastic @@ -93,3 +94,14 @@ will use general metadata in the plugin directory. The metadata files from nitpick are stored in `~/.vim/nit/`. This location can be customized with the environment variable `NIT_VIM_DIR`. + +## Documentation in preview window + +You can display the documentation for the entity under the cursor with `:call Nitdoc()`. +It will use the same metadata files as the omnifunc and the preview window. +You may want to map the function to a shortcut by adding the following code to `~/.vimrc`. + +~~~ +" Map displaying Nitdoc to Ctrl-D +map :call Nitdoc() +~~~ diff --git a/misc/vim/plugin/nit.vim b/misc/vim/plugin/nit.vim index d1e92ef..c9d54d0 100644 --- a/misc/vim/plugin/nit.vim +++ b/misc/vim/plugin/nit.vim @@ -253,6 +253,63 @@ 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 + " Activate the omnifunc on Nit files autocmd FileType nit set omnifunc=NitOmnifunc -- 1.7.9.5