" 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("") 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 exec "nnoremap q :ccl" exec "nnoremap t T" exec "nnoremap T TgT" exec "nnoremap o " exec "nnoremap go " exec "nnoremap v v" exec "nnoremap gv v" " 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',) command! -bang -nargs=* -complete=file AckAdd call s:Ack('grepadd', ) command! -bang -nargs=* -complete=file AckFromSearch call s:AckFromSearch('grep', ) command! -bang -nargs=* -complete=file LAck call s:Ack('lgrep', ) command! -bang -nargs=* -complete=file LAckAdd call s:Ack('lgrepadd', ) command! -bang -nargs=* -complete=file AckFile call s:Ack('grep -g', )