diff options
| author | Ben Beltran <ben@freshout.us> | 2012-10-08 11:44:10 -0500 |
|---|---|---|
| committer | Ben Beltran <ben@freshout.us> | 2012-10-08 11:44:10 -0500 |
| commit | 0d23b6e515a01a5782532351821ebfa11f3d6cf2 (patch) | |
| tree | aa395b7e50ccb533d6b48b809016ac06f2d5bc8c /vim/plugin/ack.vim | |
| parent | a91731eac872b7837c2821341db5888702125cef (diff) | |
Add vim again :)
Diffstat (limited to 'vim/plugin/ack.vim')
| -rw-r--r-- | vim/plugin/ack.vim | 79 |
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>) |