aboutsummaryrefslogtreecommitdiff
path: root/vim/plugin/ack.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/plugin/ack.vim')
-rw-r--r--vim/plugin/ack.vim79
1 files changed, 79 insertions, 0 deletions
diff --git a/vim/plugin/ack.vim b/vim/plugin/ack.vim
new file mode 100644
index 0000000..8cc0d45
--- /dev/null
+++ b/vim/plugin/ack.vim
@@ -0,0 +1,79 @@
+" NOTE: You must, of course, install the ack script
+" in your path.
+" On Debian / Ubuntu:
+" sudo apt-get install ack-grep
+" On your vimrc:
+" let g:ackprg="ack-grep -H --nocolor --nogroup --column"
+"
+" With MacPorts:
+" sudo port install p5-app-ack
+
+" Location of the ack utility
+if !exists("g:ackprg")
+ let g:ackprg="ack -H --nocolor --nogroup --column"
+endif
+
+function! s:Ack(cmd, args)
+ redraw
+ echo "Searching ..."
+
+ " If no pattern is provided, search for the word under the cursor
+ if empty(a:args)
+ let l:grepargs = expand("<cword>")
+ else
+ let l:grepargs = a:args
+ end
+
+ " Format, used to manage column jump
+ if a:cmd =~# '-g$'
+ let g:ackformat="%f"
+ else
+ let g:ackformat="%f:%l:%c:%m"
+ end
+
+ let grepprg_bak=&grepprg
+ let grepformat_bak=&grepformat
+ try
+ let &grepprg=g:ackprg
+ let &grepformat=g:ackformat
+ silent execute a:cmd . " " . l:grepargs
+ finally
+ let &grepprg=grepprg_bak
+ let &grepformat=grepformat_bak
+ endtry
+
+ if a:cmd =~# '^l'
+ botright lopen
+ else
+ botright copen
+ endif
+
+ " TODO: Document this!
+ exec "nnoremap <silent> <buffer> q :ccl<CR>"
+ exec "nnoremap <silent> <buffer> t <C-W><CR><C-W>T"
+ exec "nnoremap <silent> <buffer> T <C-W><CR><C-W>TgT<C-W><C-W>"
+ exec "nnoremap <silent> <buffer> o <CR>"
+ exec "nnoremap <silent> <buffer> go <CR><C-W><C-W>"
+
+ " If highlighting is on, highlight the search keyword.
+ if exists("g:ackhighlight")
+ let @/=a:args
+ set hlsearch
+ end
+
+ redraw!
+endfunction
+
+function! s:AckFromSearch(cmd, args)
+ let search = getreg('/')
+ " translate vim regular expression to perl regular expression.
+ let search = substitute(search,'\(\\<\|\\>\)','\\b','g')
+ call s:Ack(a:cmd, '"' . search .'" '. a:args)
+endfunction
+
+command! -bang -nargs=* -complete=file Ack call s:Ack('grep<bang>',<q-args>)
+command! -bang -nargs=* -complete=file AckAdd call s:Ack('grepadd<bang>', <q-args>)
+command! -bang -nargs=* -complete=file AckFromSearch call s:AckFromSearch('grep<bang>', <q-args>)
+command! -bang -nargs=* -complete=file LAck call s:Ack('lgrep<bang>', <q-args>)
+command! -bang -nargs=* -complete=file LAckAdd call s:Ack('lgrepadd<bang>', <q-args>)
+command! -bang -nargs=* -complete=file AckFile call s:Ack('grep<bang> -g', <q-args>)