misc/vim: add a function to search for instances of the word under the cursor
authorAlexis Laferrière <alexis.laf@xymus.net>
Sun, 8 Mar 2015 00:09:09 +0000 (19:09 -0500)
committerAlexis Laferrière <alexis.laf@xymus.net>
Mon, 9 Mar 2015 17:56:33 +0000 (13:56 -0400)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

misc/README.md
misc/vim/plugin/nit.vim

index 1a7b97f..1661f43 100644 (file)
@@ -38,6 +38,7 @@ Ensure that `~/.vimrc` contains
  * Syntax checker (require [Syntastic][2]).
  * Autocomplete for whole projects using module importations
  * Show documentation in preview window
+ * Search declarations and usages of the word under the cursor
 
   [2]: https://github.com/scrooloose/syntastic
 
@@ -105,3 +106,14 @@ You may want to map the function to a shortcut by adding the following code to `
 " Map displaying Nitdoc to Ctrl-D
 map <C-d> :call Nitdoc()<enter>
 ~~~
+
+## Search declarations and usages of the word under the cursor
+
+The function `NitGitGrep` calls `git grep` to find declarations and usages of the word under the cursor.
+It displays the results in the preview window.
+You may want to map the function to a shortcut by adding the following code to `~/.vimrc`.
+
+~~~
+" Map the NitGitGrep function to Ctrl-G
+map <C-g> :call NitGitGrep()<enter>
+~~~
index c9d54d0..b1b115b 100644 (file)
@@ -310,6 +310,32 @@ fun Nitdoc()
        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("<cword>")
+       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