aboutsummaryrefslogtreecommitdiff
path: root/vim/plugin/ack.vim
diff options
context:
space:
mode:
authorBen Beltran <ben@freshout.us>2012-10-08 11:44:10 -0500
committerBen Beltran <ben@freshout.us>2012-10-08 11:44:10 -0500
commit0d23b6e515a01a5782532351821ebfa11f3d6cf2 (patch)
treeaa395b7e50ccb533d6b48b809016ac06f2d5bc8c /vim/plugin/ack.vim
parenta91731eac872b7837c2821341db5888702125cef (diff)
Add vim again :)
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>)