mirror of
https://github.com/amix/vimrc
synced 2025-09-19 11:14:59 +08:00
Updated plugins
This commit is contained in:
143
sources_non_forked/ack.vim/autoload/ack.vim
Normal file
143
sources_non_forked/ack.vim/autoload/ack.vim
Normal file
@ -0,0 +1,143 @@
|
||||
function! ack#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 . join(a:000, ' ')
|
||||
end
|
||||
let l:ackprg_run = g:ackprg
|
||||
|
||||
" Format, used to manage column jump
|
||||
if a:cmd =~# '-g$'
|
||||
let g:ackformat="%f"
|
||||
let l:ackprg_run = substitute(l:ackprg_run, '-H\|--column', '', 'g')
|
||||
else
|
||||
let g:ackformat="%f:%l:%c:%m,%f:%l:%m"
|
||||
endif
|
||||
|
||||
let grepprg_bak = &grepprg
|
||||
let grepformat_bak = &grepformat
|
||||
let &grepprg=l:ackprg_run
|
||||
let &grepformat=g:ackformat
|
||||
|
||||
try
|
||||
" NOTE: we escape special chars, but not everything using shellescape to
|
||||
" allow for passing arguments etc
|
||||
silent execute a:cmd . " " . escape(l:grepargs, '|#%')
|
||||
finally
|
||||
let &grepprg=grepprg_bak
|
||||
let &grepformat=grepformat_bak
|
||||
endtry
|
||||
|
||||
if a:cmd =~# '^l'
|
||||
let s:handler = g:ack_lhandler
|
||||
let s:apply_mappings = g:ack_apply_lmappings
|
||||
let s:close_cmd = ':lclose<CR>'
|
||||
else
|
||||
let s:handler = g:ack_qhandler
|
||||
let s:apply_mappings = g:ack_apply_qmappings
|
||||
let s:close_cmd = ':cclose<CR>'
|
||||
endif
|
||||
|
||||
call ack#show_results()
|
||||
call <SID>highlight(l:grepargs)
|
||||
|
||||
redraw!
|
||||
endfunction
|
||||
|
||||
function! ack#show_results()
|
||||
execute s:handler
|
||||
call <SID>apply_maps()
|
||||
endfunction
|
||||
|
||||
function! s:apply_maps()
|
||||
let g:ack_mappings.q = s:close_cmd
|
||||
|
||||
execute "nnoremap <buffer> <silent> ? :call ack#quick_help()<CR>"
|
||||
|
||||
if s:apply_mappings && &ft == "qf"
|
||||
if g:ack_autoclose
|
||||
for key_map in items(g:ack_mappings)
|
||||
execute printf("nnoremap <buffer> <silent> %s %s", get(key_map, 0), get(key_map, 1) . s:close_cmd)
|
||||
endfor
|
||||
execute "nnoremap <buffer> <silent> <CR> <CR>" . s:close_cmd
|
||||
else
|
||||
for key_map in items(g:ack_mappings)
|
||||
execute printf("nnoremap <buffer> <silent> %s %s", get(key_map, 0), get(key_map, 1))
|
||||
endfor
|
||||
endif
|
||||
|
||||
if exists("g:ackpreview") " if auto preview in on, remap j and k keys
|
||||
execute "nnoremap <buffer> <silent> j j<CR><C-W><C-W>"
|
||||
execute "nnoremap <buffer> <silent> k k<CR><C-W><C-W>"
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! ack#quick_help()
|
||||
execute "edit " . globpath(&rtp, "doc/ack_quick_help.txt")
|
||||
|
||||
silent normal gg
|
||||
setlocal buftype=nofile
|
||||
setlocal bufhidden=hide
|
||||
setlocal noswapfile
|
||||
setlocal nobuflisted
|
||||
setlocal nomodifiable
|
||||
setlocal filetype=help
|
||||
setlocal nonumber
|
||||
setlocal norelativenumber
|
||||
setlocal nowrap
|
||||
setlocal foldlevel=20
|
||||
setlocal foldmethod=diff
|
||||
nnoremap <buffer> <silent> ? :q!<CR>:call ack#show_results()<CR>
|
||||
endfunction
|
||||
|
||||
function! s:highlight(args)
|
||||
if !g:ackhighlight
|
||||
return
|
||||
endif
|
||||
|
||||
let @/ = matchstr(a:args, "\\v\\w+\>|['\"]\\zs[^\"]+\\ze['\"]")
|
||||
setlocal hlsearch
|
||||
call feedkeys(":let v:hlsearch=1 \| echo \<CR>", "n")
|
||||
endfunction
|
||||
|
||||
function! ack#AckFromSearch(cmd, args)
|
||||
let search = getreg('/')
|
||||
" translate vim regular expression to perl regular expression.
|
||||
let search = substitute(search, '\(\\<\|\\>\)', '\\b', 'g')
|
||||
call ack#Ack(a:cmd, '"' . search . '" ' . a:args)
|
||||
endfunction
|
||||
|
||||
function! s:GetDocLocations()
|
||||
let dp = ''
|
||||
for p in split(&rtp, ',')
|
||||
let p = p . '/doc/'
|
||||
if isdirectory(p)
|
||||
let dp = p . '*.txt ' . dp
|
||||
endif
|
||||
endfor
|
||||
|
||||
return dp
|
||||
endfunction
|
||||
|
||||
function! ack#AckHelp(cmd, args)
|
||||
let args = a:args . ' ' . s:GetDocLocations()
|
||||
call ack#Ack(a:cmd, args)
|
||||
endfunction
|
||||
|
||||
function! ack#AckWindow(cmd, args)
|
||||
let files = tabpagebuflist()
|
||||
" remove duplicated filenames (files appearing in more than one window)
|
||||
let files = filter(copy(sort(files)), 'index(files,v:val,v:key+1)==-1')
|
||||
call map(files, "bufname(v:val)")
|
||||
" remove unnamed buffers as quickfix (empty strings before shellescape)
|
||||
call filter(files, 'v:val != ""')
|
||||
" expand to full path (avoid problems with cd/lcd in au QuickFixCmdPre)
|
||||
let files = map(files, "shellescape(fnamemodify(v:val, ':p'))")
|
||||
let args = a:args . ' ' . join(files)
|
||||
call ack#Ack(a:cmd, args)
|
||||
endfunction
|
Reference in New Issue
Block a user