Removed ack.vim
This commit is contained in:
parent
068316713b
commit
50ae0a55f6
9 changed files with 0 additions and 920 deletions
1
sources_non_forked/ack.vim/.gitignore
vendored
1
sources_non_forked/ack.vim/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
tags
|
|
|
@ -1,89 +0,0 @@
|
||||||
ack.vim is distributed under the same license terms as Vim itself, which you
|
|
||||||
can find in full with `:help license` within Vim, or copied in full herein.
|
|
||||||
|
|
||||||
Copyright (c) 2007-2015 Antoine Imbert <antoine.imbert+ackvim@gmail.com>
|
|
||||||
and contributors.
|
|
||||||
|
|
||||||
Maintainers may be contacted via GitHub Issues at:
|
|
||||||
|
|
||||||
https://github.com/mileszs/ack.vim/issues
|
|
||||||
|
|
||||||
|
|
||||||
VIM LICENSE
|
|
||||||
|
|
||||||
I) There are no restrictions on distributing unmodified copies of Vim except
|
|
||||||
that they must include this license text. You can also distribute
|
|
||||||
unmodified parts of Vim, likewise unrestricted except that they must
|
|
||||||
include this license text. You are also allowed to include executables
|
|
||||||
that you made from the unmodified Vim sources, plus your own usage
|
|
||||||
examples and Vim scripts.
|
|
||||||
|
|
||||||
II) It is allowed to distribute a modified (or extended) version of Vim,
|
|
||||||
including executables and/or source code, when the following four
|
|
||||||
conditions are met:
|
|
||||||
1) This license text must be included unmodified.
|
|
||||||
2) The modified Vim must be distributed in one of the following five ways:
|
|
||||||
a) If you make changes to Vim yourself, you must clearly describe in
|
|
||||||
the distribution how to contact you. When the maintainer asks you
|
|
||||||
(in any way) for a copy of the modified Vim you distributed, you
|
|
||||||
must make your changes, including source code, available to the
|
|
||||||
maintainer without fee. The maintainer reserves the right to
|
|
||||||
include your changes in the official version of Vim. What the
|
|
||||||
maintainer will do with your changes and under what license they
|
|
||||||
will be distributed is negotiable. If there has been no negotiation
|
|
||||||
then this license, or a later version, also applies to your changes.
|
|
||||||
The current maintainer is Bram Moolenaar <Bram@vim.org>. If this
|
|
||||||
changes it will be announced in appropriate places (most likely
|
|
||||||
vim.sf.net, www.vim.org and/or comp.editors). When it is completely
|
|
||||||
impossible to contact the maintainer, the obligation to send him
|
|
||||||
your changes ceases. Once the maintainer has confirmed that he has
|
|
||||||
received your changes they will not have to be sent again.
|
|
||||||
b) If you have received a modified Vim that was distributed as
|
|
||||||
mentioned under a) you are allowed to further distribute it
|
|
||||||
unmodified, as mentioned at I). If you make additional changes the
|
|
||||||
text under a) applies to those changes.
|
|
||||||
c) Provide all the changes, including source code, with every copy of
|
|
||||||
the modified Vim you distribute. This may be done in the form of a
|
|
||||||
context diff. You can choose what license to use for new code you
|
|
||||||
add. The changes and their license must not restrict others from
|
|
||||||
making their own changes to the official version of Vim.
|
|
||||||
d) When you have a modified Vim which includes changes as mentioned
|
|
||||||
under c), you can distribute it without the source code for the
|
|
||||||
changes if the following three conditions are met:
|
|
||||||
- The license that applies to the changes permits you to distribute
|
|
||||||
the changes to the Vim maintainer without fee or restriction, and
|
|
||||||
permits the Vim maintainer to include the changes in the official
|
|
||||||
version of Vim without fee or restriction.
|
|
||||||
- You keep the changes for at least three years after last
|
|
||||||
distributing the corresponding modified Vim. When the maintainer
|
|
||||||
or someone who you distributed the modified Vim to asks you (in
|
|
||||||
any way) for the changes within this period, you must make them
|
|
||||||
available to him.
|
|
||||||
- You clearly describe in the distribution how to contact you. This
|
|
||||||
contact information must remain valid for at least three years
|
|
||||||
after last distributing the corresponding modified Vim, or as long
|
|
||||||
as possible.
|
|
||||||
e) When the GNU General Public License (GPL) applies to the changes,
|
|
||||||
you can distribute the modified Vim under the GNU GPL version 2 or
|
|
||||||
any later version.
|
|
||||||
3) A message must be added, at least in the output of the ":version"
|
|
||||||
command and in the intro screen, such that the user of the modified Vim
|
|
||||||
is able to see that it was modified. When distributing as mentioned
|
|
||||||
under 2)e) adding the message is only required for as far as this does
|
|
||||||
not conflict with the license used for the changes.
|
|
||||||
4) The contact information as required under 2)a) and 2)d) must not be
|
|
||||||
removed or changed, except that the person himself can make
|
|
||||||
corrections.
|
|
||||||
|
|
||||||
III) If you distribute a modified version of Vim, you are encouraged to use
|
|
||||||
the Vim license for your changes and make them available to the
|
|
||||||
maintainer, including the source code. The preferred way to do this is
|
|
||||||
by e-mail or by uploading the files to a server and e-mailing the URL.
|
|
||||||
If the number of changes is small (e.g., a modified Makefile) e-mailing a
|
|
||||||
context diff will do. The e-mail address to be used is
|
|
||||||
<maintainer@vim.org>
|
|
||||||
|
|
||||||
IV) It is not allowed to remove this license from the distribution of the Vim
|
|
||||||
sources, parts of it or from a modified version. You may use this
|
|
||||||
license for previous Vim releases instead of the license that they came
|
|
||||||
with, at your option.
|
|
|
@ -1,161 +0,0 @@
|
||||||
# ack.vim
|
|
||||||
|
|
||||||
Run your favorite search tool from Vim, with an enhanced results list.
|
|
||||||
|
|
||||||
This plugin was designed as a Vim frontend for the Perl module [App::Ack]. Ack
|
|
||||||
can be used as a replacement for 99% of the uses of _grep_. The plugin allows
|
|
||||||
you to run ack from Vim, and shows the results in a split window.
|
|
||||||
|
|
||||||
But here's a little secret for the Vim-seasoned: it's just a light wrapper for
|
|
||||||
Vim's [grepprg] and the [quickfix] window for match results. This makes it easy
|
|
||||||
to integrate with your own Vim configuration and use existing knowledge of core
|
|
||||||
features. It also means the plugin is flexible to use with other search tools.
|
|
||||||
|
|
||||||
[App::Ack]: http://search.cpan.org/~petdance/ack/ack
|
|
||||||
[grepprg]: http://vimdoc.sourceforge.net/htmldoc/options.html#'grepprg'
|
|
||||||
[quickfix]: http://vimdoc.sourceforge.net/htmldoc/quickfix.html#quickfix
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
### Ack
|
|
||||||
|
|
||||||
You will need ack (>= 2.0), of course. To install it follow the
|
|
||||||
[manual](http://beyondgrep.com/install/).
|
|
||||||
|
|
||||||
### The Plugin
|
|
||||||
|
|
||||||
It is recommended to use one of the popular plugin managers for Vim. There are
|
|
||||||
many and you probably already have a preferred one, but a few examples for your
|
|
||||||
copy-and-paste convenience:
|
|
||||||
|
|
||||||
#### Pathogen
|
|
||||||
|
|
||||||
$ git clone https://github.com/mileszs/ack.vim.git ~/.vim/bundle/ack.vim
|
|
||||||
|
|
||||||
#### Vundle
|
|
||||||
|
|
||||||
```vim
|
|
||||||
Plugin 'mileszs/ack.vim'
|
|
||||||
```
|
|
||||||
|
|
||||||
#### NeoBundle
|
|
||||||
|
|
||||||
```vim
|
|
||||||
NeoBundle 'mileszs/ack.vim'
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Manual (not recommended)
|
|
||||||
|
|
||||||
[Download][releases] the plugin and extract it in `~/.vim/` (or
|
|
||||||
`%PROGRAMFILES%/Vim/vimfiles` on Windows).
|
|
||||||
|
|
||||||
[zipball]: https://github.com/mileszs/ack.vim/archive/master.zip
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
:Ack [options] {pattern} [{directories}]
|
|
||||||
|
|
||||||
Search recursively in `{directories}` (which defaults to the current directory)
|
|
||||||
for the `{pattern}`.
|
|
||||||
|
|
||||||
Files containing the search term will be listed in the quickfix window, along
|
|
||||||
with the line number of the occurrence, once for each occurrence. `<Enter>` on
|
|
||||||
a line in this window will open the file, and place the cursor on the matching
|
|
||||||
line.
|
|
||||||
|
|
||||||
Just like where you use `:grep`, `:grepadd`, `:lgrep`, and :`lgrepadd`, you can
|
|
||||||
use `:Ack`, `:AckAdd`, `:LAck`, and `:LAckAdd` respectively. (See `:help Ack`
|
|
||||||
after installing, or [`doc/ack.txt`][doc] in the repo, for more information.)
|
|
||||||
|
|
||||||
For more ack help see [ack documentation](http://beyondgrep.com/documentation/).
|
|
||||||
|
|
||||||
[doc]: https://github.com/mileszs/ack.vim/blob/master/doc/ack.txt
|
|
||||||
|
|
||||||
### Keyboard Shortcuts
|
|
||||||
|
|
||||||
The quickfix results window is augmented with these convenience mappings:
|
|
||||||
|
|
||||||
? a quick summary of these keys, repeat to close
|
|
||||||
o to open (same as Enter)
|
|
||||||
O to open and close the quickfix window
|
|
||||||
go to preview file, open but maintain focus on ack.vim results
|
|
||||||
t to open in new tab
|
|
||||||
T to open in new tab without moving to it
|
|
||||||
h to open in horizontal split
|
|
||||||
H to open in horizontal split, keeping focus on the results
|
|
||||||
v to open in vertical split
|
|
||||||
gv to open in vertical split, keeping focus on the results
|
|
||||||
q to close the quickfix window
|
|
||||||
|
|
||||||
### Gotchas
|
|
||||||
|
|
||||||
Some characters have special meaning, and need to be escaped in your search
|
|
||||||
pattern. For instance, `#`. You need to escape it with `:Ack '\\\#define
|
|
||||||
foo'` to search for '#define foo'. See [issue #5].
|
|
||||||
|
|
||||||
[issue #5]: https://github.com/mileszs/ack.vim/issues/5
|
|
||||||
|
|
||||||
## Possibly FAQ
|
|
||||||
|
|
||||||
#### Can I use `ag` ([The Silver Searcher]) with this?
|
|
||||||
|
|
||||||
Absolutely, and probably other tools if their output is similar or you can
|
|
||||||
write a pattern match for it--just set `g:ackprg`. If you like, you can fall
|
|
||||||
back to Ack in case you use your vimrc on a system without Ag available:
|
|
||||||
|
|
||||||
```vim
|
|
||||||
if executable('ag')
|
|
||||||
let g:ackprg = 'ag --vimgrep'
|
|
||||||
endif
|
|
||||||
```
|
|
||||||
|
|
||||||
Since Ack is quite portable you might check a copy of it into your dotfiles
|
|
||||||
repository in `~/bin` so you'll nearly always have it available.
|
|
||||||
|
|
||||||
#### What's the difference from ag.vim?
|
|
||||||
|
|
||||||
Well... not a lot really.
|
|
||||||
|
|
||||||
Present maintainer, yours truly, [kind of wishes they never forked][sadface],
|
|
||||||
contributes to both, and wouldn't mind seeing them merged again. ag.vim got a
|
|
||||||
nice code clean-up (which ack.vim is now hopefully getting), and ack.vim picked
|
|
||||||
up a few features that haven't made their way to ag.vim, like `:AckWindow`,
|
|
||||||
optional background search execution with [vim-dispatch], and auto-previewing.
|
|
||||||
|
|
||||||
#### I don't want to jump to the first result automatically. ####
|
|
||||||
|
|
||||||
Use `:Ack!`, with bang. If you want this behavior most of the time, you might
|
|
||||||
like an abbreviation or mapping in your personal config, something like these:
|
|
||||||
|
|
||||||
```vim
|
|
||||||
cnoreabbrev Ack Ack!
|
|
||||||
nnoremap <Leader>a :Ack!<Space>
|
|
||||||
```
|
|
||||||
|
|
||||||
Most of the `:[L]Ack*` commands support this. Note that this behavior follows
|
|
||||||
the convention of Vim's built-in `:grep` and `:make` commands.
|
|
||||||
|
|
||||||
[The Silver Searcher]: https://github.com/ggreer/the_silver_searcher
|
|
||||||
[sadface]: https://github.com/mileszs/ack.vim/commit/d97090fb502d40229e6976dfec0e06636ba227d5#commitcomment-5771145
|
|
||||||
|
|
||||||
## Changelog
|
|
||||||
|
|
||||||
Please see [the Github releases page][releases].
|
|
||||||
|
|
||||||
## Credits
|
|
||||||
|
|
||||||
This plugin is derived from Antoine Imbert's blog post [Ack and Vim
|
|
||||||
Integration][] (in particular, the function in the update to the post). [Miles
|
|
||||||
Sterrett][mileszs] packaged it up as a plugin and documented it in Vim's help
|
|
||||||
format, and since then [many contributors][contributors] have submitted
|
|
||||||
enhancements and fixes.
|
|
||||||
|
|
||||||
And of course, where would we be without [Ack]. And, you know, Vim.
|
|
||||||
|
|
||||||
[Ack and Vim Integration]: http://blog.ant0ine.com/typepad/2007/03/ack-and-vim-integration.html
|
|
||||||
[mileszs]: https://github.com/mileszs
|
|
||||||
[contributors]: https://github.com/mileszs/ack.vim/graphs/contributors
|
|
||||||
[Ack]: http://beyondgrep.com/
|
|
||||||
|
|
||||||
[vim-dispatch]: https://github.com/tpope/vim-dispatch
|
|
||||||
[releases]: https://github.com/mileszs/ack.vim/releases
|
|
|
@ -1,246 +0,0 @@
|
||||||
if exists('g:autoloaded_ack') || &cp
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
if exists('g:ack_use_dispatch')
|
|
||||||
if g:ack_use_dispatch && !exists(':Dispatch')
|
|
||||||
call s:Warn('Dispatch not loaded! Falling back to g:ack_use_dispatch = 0.')
|
|
||||||
let g:ack_use_dispatch = 0
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
let g:ack_use_dispatch = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
"-----------------------------------------------------------------------------
|
|
||||||
" Public API
|
|
||||||
"-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function! ack#Ack(cmd, args) "{{{
|
|
||||||
call s:Init(a:cmd)
|
|
||||||
redraw
|
|
||||||
|
|
||||||
" Local values that we'll temporarily set as options when searching
|
|
||||||
let l:grepprg = g:ackprg
|
|
||||||
let l:grepformat = '%f:%l:%c:%m,%f:%l:%m' " Include column number
|
|
||||||
|
|
||||||
" Strip some options that are meaningless for path search and set match
|
|
||||||
" format accordingly.
|
|
||||||
if s:SearchingFilepaths()
|
|
||||||
let l:grepprg = substitute(l:grepprg, '-H\|--column', '', 'g')
|
|
||||||
let l:grepformat = '%f'
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Check user policy for blank searches
|
|
||||||
if empty(a:args)
|
|
||||||
if !g:ack_use_cword_for_empty_search
|
|
||||||
echo "No regular expression found."
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If no pattern is provided, search for the word under the cursor
|
|
||||||
let l:grepargs = empty(a:args) ? expand("<cword>") : a:args . join(a:000, ' ')
|
|
||||||
|
|
||||||
"Bypass search if cursor is on blank string
|
|
||||||
if l:grepargs == ""
|
|
||||||
echo "No regular expression found."
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
" NOTE: we escape special chars, but not everything using shellescape to
|
|
||||||
" allow for passing arguments etc
|
|
||||||
let l:escaped_args = escape(l:grepargs, '|#%')
|
|
||||||
|
|
||||||
echo "Searching ..."
|
|
||||||
|
|
||||||
if g:ack_use_dispatch
|
|
||||||
call s:SearchWithDispatch(l:grepprg, l:escaped_args, l:grepformat)
|
|
||||||
else
|
|
||||||
call s:SearchWithGrep(a:cmd, l:grepprg, l:escaped_args, l:grepformat)
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Dispatch has no callback mechanism currently, we just have to display the
|
|
||||||
" list window early and wait for it to populate :-/
|
|
||||||
call ack#ShowResults()
|
|
||||||
call s:Highlight(l:grepargs)
|
|
||||||
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! 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 "}}}
|
|
||||||
|
|
||||||
function! ack#ShowResults() "{{{
|
|
||||||
let l:handler = s:UsingLocList() ? g:ack_lhandler : g:ack_qhandler
|
|
||||||
execute l:handler
|
|
||||||
call s:ApplyMappings()
|
|
||||||
redraw!
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
"-----------------------------------------------------------------------------
|
|
||||||
" Private API
|
|
||||||
"-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function! s:ApplyMappings() "{{{
|
|
||||||
if !s:UsingListMappings() || &filetype != 'qf'
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:wintype = s:UsingLocList() ? 'l' : 'c'
|
|
||||||
let l:closemap = ':' . l:wintype . 'close<CR>'
|
|
||||||
let g:ack_mappings.q = l:closemap
|
|
||||||
|
|
||||||
nnoremap <buffer> <silent> ? :call <SID>QuickHelp()<CR>
|
|
||||||
|
|
||||||
if g:ack_autoclose
|
|
||||||
" We just map the 'go' and 'gv' mappings to close on autoclose, wtf?
|
|
||||||
for key_map in items(g:ack_mappings)
|
|
||||||
execute printf("nnoremap <buffer> <silent> %s %s", get(key_map, 0), get(key_map, 1) . l:closemap)
|
|
||||||
endfor
|
|
||||||
|
|
||||||
execute "nnoremap <buffer> <silent> <CR> <CR>" . l:closemap
|
|
||||||
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
|
|
||||||
nnoremap <buffer> <silent> j j<CR><C-W><C-W>
|
|
||||||
nnoremap <buffer> <silent> k k<CR><C-W><C-W>
|
|
||||||
nmap <buffer> <silent> <Down> j
|
|
||||||
nmap <buffer> <silent> <Up> k
|
|
||||||
endif
|
|
||||||
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! s:Highlight(args) "{{{
|
|
||||||
if !g:ackhighlight
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
let @/ = matchstr(a:args, "\\v(-)\@<!(\<)\@<=\\w+|['\"]\\zs.{-}\\ze['\"]")
|
|
||||||
call feedkeys(":let &hlsearch=1 \| echo \<CR>", "n")
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
" Initialize state for an :Ack* or :LAck* search
|
|
||||||
function! s:Init(cmd) "{{{
|
|
||||||
let s:searching_filepaths = (a:cmd =~# '-g$') ? 1 : 0
|
|
||||||
let s:using_loclist = (a:cmd =~# '^l') ? 1 : 0
|
|
||||||
|
|
||||||
if g:ack_use_dispatch && s:using_loclist
|
|
||||||
call s:Warn('Dispatch does not support location lists! Proceeding with quickfix...')
|
|
||||||
let s:using_loclist = 0
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:QuickHelp() "{{{
|
|
||||||
execute 'edit' globpath(&rtp, 'doc/ack_quick_help.txt')
|
|
||||||
|
|
||||||
silent normal gg
|
|
||||||
setlocal buftype=nofile bufhidden=hide nobuflisted
|
|
||||||
setlocal nomodifiable noswapfile
|
|
||||||
setlocal filetype=help
|
|
||||||
setlocal nonumber norelativenumber nowrap
|
|
||||||
setlocal foldmethod=diff foldlevel=20
|
|
||||||
|
|
||||||
nnoremap <buffer> <silent> ? :q!<CR>:call ack#ShowResults()<CR>
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:SearchWithDispatch(grepprg, grepargs, grepformat) "{{{
|
|
||||||
let l:makeprg_bak = &l:makeprg
|
|
||||||
let l:errorformat_bak = &l:errorformat
|
|
||||||
|
|
||||||
" We don't execute a :grep command for Dispatch, so add -g here instead
|
|
||||||
if s:SearchingFilepaths()
|
|
||||||
let l:grepprg = a:grepprg . ' -g'
|
|
||||||
else
|
|
||||||
let l:grepprg = a:grepprg
|
|
||||||
endif
|
|
||||||
|
|
||||||
try
|
|
||||||
let &l:makeprg = l:grepprg . ' ' . a:grepargs
|
|
||||||
let &l:errorformat = a:grepformat
|
|
||||||
|
|
||||||
Make
|
|
||||||
finally
|
|
||||||
let &l:makeprg = l:makeprg_bak
|
|
||||||
let &l:errorformat = l:errorformat_bak
|
|
||||||
endtry
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:SearchWithGrep(grepcmd, grepprg, grepargs, grepformat) "{{{
|
|
||||||
let l:grepprg_bak = &l:grepprg
|
|
||||||
let l:grepformat_bak = &grepformat
|
|
||||||
|
|
||||||
try
|
|
||||||
let &l:grepprg = a:grepprg
|
|
||||||
let &grepformat = a:grepformat
|
|
||||||
|
|
||||||
silent execute a:grepcmd a:grepargs
|
|
||||||
finally
|
|
||||||
let &l:grepprg = l:grepprg_bak
|
|
||||||
let &grepformat = l:grepformat_bak
|
|
||||||
endtry
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
" Are we finding matching files, not lines? (the -g option -- :AckFile)
|
|
||||||
function! s:SearchingFilepaths() "{{{
|
|
||||||
return get(s:, 'searching_filepaths', 0)
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
" Predicate for whether mappings are enabled for list type of current search.
|
|
||||||
function! s:UsingListMappings() "{{{
|
|
||||||
if s:UsingLocList()
|
|
||||||
return g:ack_apply_lmappings
|
|
||||||
else
|
|
||||||
return g:ack_apply_qmappings
|
|
||||||
endif
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
" Were we invoked with a :LAck command?
|
|
||||||
function! s:UsingLocList() "{{{
|
|
||||||
return get(s:, 'using_loclist', 0)
|
|
||||||
endfunction "}}}
|
|
||||||
|
|
||||||
function! s:Warn(msg) "{{{
|
|
||||||
echohl WarningMsg | echomsg 'Ack: ' . a:msg | echohl None
|
|
||||||
endf "}}}
|
|
||||||
|
|
||||||
let g:autoloaded_ack = 1
|
|
||||||
" vim:set et sw=2 ts=2 tw=78 fdm=marker
|
|
|
@ -1,315 +0,0 @@
|
||||||
*ack.txt* Plugin that integrates ack with Vim
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Author: Antoine Imbert <antoine.imbert+ackvim@gmail.com> *ack-author*
|
|
||||||
License: Same terms as Vim itself (see |license|)
|
|
||||||
|
|
||||||
This plugin is only available if 'compatible' is not set.
|
|
||||||
|
|
||||||
{Vi does not have any of this}
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
INTRODUCTION *ack*
|
|
||||||
|
|
||||||
This plugin is a front for the Perl module App::Ack. Ack can be used as a
|
|
||||||
replacement for grep. This plugin will allow you to run ack from vim, and
|
|
||||||
shows the results in a split window.
|
|
||||||
|
|
||||||
:Ack[!] [options] {pattern} [{directory}] *:Ack*
|
|
||||||
|
|
||||||
Search recursively in {directory} (which defaults to the current
|
|
||||||
directory) for the {pattern}. Behaves just like the |:grep| command, but
|
|
||||||
will open the |Quickfix| window for you. If [!] is not given the first
|
|
||||||
occurrence is jumped to.
|
|
||||||
|
|
||||||
:AckAdd [options] {pattern} [{directory}] *:AckAdd*
|
|
||||||
|
|
||||||
Just like |:Ack|, but instead of making a new list, the matches are
|
|
||||||
appended to the current |quickfix| list.
|
|
||||||
|
|
||||||
:AckFromSearch [{directory}] *:AckFromSearch*
|
|
||||||
|
|
||||||
Just like |:Ack| but the pattern is from previous search.
|
|
||||||
|
|
||||||
:LAck [options] {pattern} [{directory}] *:LAck*
|
|
||||||
|
|
||||||
Just like |:Ack| but instead of the |quickfix| list, matches are placed in
|
|
||||||
the current |location-list|.
|
|
||||||
|
|
||||||
:LAckAdd [options] {pattern} [{directory}] *:LAckAdd*
|
|
||||||
|
|
||||||
Just like |:AckAdd| but instead of the |quickfix| list, matches are added
|
|
||||||
to the current |location-list|
|
|
||||||
|
|
||||||
:AckFile [options] {pattern} [{directory}] *:AckFile*
|
|
||||||
|
|
||||||
Search recursively in {directory} (which defaults to the current
|
|
||||||
directory) for filenames matching the {pattern}. Behaves just like the
|
|
||||||
|:grep| command, but will open the |Quickfix| window for you.
|
|
||||||
|
|
||||||
:AckHelp[!] [options] {pattern} *:AckHelp*
|
|
||||||
|
|
||||||
Search vim documentation files for the {pattern}. Behaves just like the
|
|
||||||
|:Ack| command, but searches only vim documentation .txt files
|
|
||||||
|
|
||||||
:LAckHelp [options] {pattern} *:LAckHelp*
|
|
||||||
|
|
||||||
Just like |:AckHelp| but instead of the |quickfix| list, matches are placed
|
|
||||||
in the current |location-list|.
|
|
||||||
|
|
||||||
:AckWindow[!] [options] {pattern} *:AckWindow*
|
|
||||||
|
|
||||||
Search all buffers visible in the screen (current tab page only) files for
|
|
||||||
the {pattern}.
|
|
||||||
|
|
||||||
:LAckWindow [options] {pattern} *:LAckWindow*
|
|
||||||
|
|
||||||
Just like |:AckWindow| but instead of the |quickfix| list, matches are
|
|
||||||
placed in the current |location-list|.
|
|
||||||
|
|
||||||
Files containing the search term will be listed in the split window, along
|
|
||||||
with the line number of the occurrence, once for each occurrence. <Enter> on
|
|
||||||
a line in this window will open the file, and place the cursor on the matching
|
|
||||||
line.
|
|
||||||
|
|
||||||
Note that if you are using Dispatch.vim with |g:ack_use_dispatch|, location
|
|
||||||
lists are not supported, because Dispatch does not support them at this time.
|
|
||||||
`:LAck` versions of commands above will give a warning and proceed to use the
|
|
||||||
quickfix list instead.
|
|
||||||
|
|
||||||
See http://beyondgrep.com/ for more information on searching with ack.
|
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
CONFIGURATION *ack-configuration*
|
|
||||||
|
|
||||||
*g:ackprg*
|
|
||||||
g:ackprg
|
|
||||||
Default for ubuntu: "ack-grep"
|
|
||||||
Default for other systems: "ack"
|
|
||||||
|
|
||||||
Use this option to specify the search command and its default arguments.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
>
|
|
||||||
let g:ackprg = "ag --vimgrep"
|
|
||||||
<
|
|
||||||
*g:ack_default_options*
|
|
||||||
g:ack_default_options
|
|
||||||
Default: " -s -H --nocolor --nogroup --column"
|
|
||||||
|
|
||||||
Use this option to specify the default arguments given to `ack`. This is only
|
|
||||||
used if |g:ackprg| has not been customized from the default--if you are using
|
|
||||||
a custom search program instead of Ack, set your preferred options in
|
|
||||||
|g:ackprg|.
|
|
||||||
|
|
||||||
NOTE: This option may be deprecated in the future. ~
|
|
||||||
|
|
||||||
Example:
|
|
||||||
>
|
|
||||||
let g:ack_default_options =
|
|
||||||
\ " -s -H --nocolor --nogroup --column --smart-case --follow"
|
|
||||||
<
|
|
||||||
*g:ack_apply_qmappings*
|
|
||||||
g:ack_apply_qmappings
|
|
||||||
Default: 1
|
|
||||||
|
|
||||||
This option enables mappings on the |quickfix| window.
|
|
||||||
|
|
||||||
*g:ack_apply_lmappings*
|
|
||||||
g:ack_apply_lmappings
|
|
||||||
Default: 1
|
|
||||||
|
|
||||||
This option enables mappings on |location-list| windows.
|
|
||||||
|
|
||||||
*g:ack_mappings*
|
|
||||||
g:ack_mappings
|
|
||||||
Default: {
|
|
||||||
\ "t": "<C-W><CR><C-W>T",
|
|
||||||
\ "T": "<C-W><CR><C-W>TgT<C-W>j",
|
|
||||||
\ "o": "<CR>",
|
|
||||||
\ "O": "<CR><C-W><C-W>:ccl<CR>",
|
|
||||||
\ "go": "<CR><C-W>j",
|
|
||||||
\ "h": "<C-W><CR><C-W>K",
|
|
||||||
\ "H": "<C-W><CR><C-W>K<C-W>b",
|
|
||||||
\ "v": "<C-W><CR><C-W>H<C-W>b<C-W>J<C-W>t",
|
|
||||||
\ "gv": "<C-W><CR><C-W>H<C-W>b<C-W>J" }
|
|
||||||
|
|
||||||
This option list all maps create on quickfix/Location list window.
|
|
||||||
|
|
||||||
Example, if you want to open the result in the middle of the screen:
|
|
||||||
>
|
|
||||||
let g:ack_mappings = { "o": "<CR>zz" }
|
|
||||||
<
|
|
||||||
*g:ack_qhandler*
|
|
||||||
g:ack_qhandler
|
|
||||||
Default: "botright copen"
|
|
||||||
|
|
||||||
Command to open the quickview window.
|
|
||||||
|
|
||||||
If you want to open a quickview window with 30 lines you can do:
|
|
||||||
>
|
|
||||||
let g:ack_qhandler = "botright copen 30"
|
|
||||||
<
|
|
||||||
*g:ack_lhandler*
|
|
||||||
g:ack_lhandler
|
|
||||||
Default: "botright lopen"
|
|
||||||
|
|
||||||
Command to open the Location list window.
|
|
||||||
|
|
||||||
If you want to open a Location list window with 30 lines you can do:
|
|
||||||
>
|
|
||||||
let g:ack_lhandler = "botright lopen 30"
|
|
||||||
<
|
|
||||||
*g:ackhighlight*
|
|
||||||
g:ackhighlight
|
|
||||||
Default: 0
|
|
||||||
|
|
||||||
Use this option to highlight the searched term.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
>
|
|
||||||
let g:ackhighlight = 1
|
|
||||||
<
|
|
||||||
*g:ack_autoclose*
|
|
||||||
g:ack_autoclose
|
|
||||||
Default: 0
|
|
||||||
|
|
||||||
Use this option to specify whether to close the quickfix window after
|
|
||||||
using any of the shortcuts.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
>
|
|
||||||
let g:ack_autoclose = 1
|
|
||||||
<
|
|
||||||
*g:ack_autofold_results*
|
|
||||||
g:ack_autofold_results
|
|
||||||
Default: 0
|
|
||||||
|
|
||||||
Use this option to fold the results in quickfix by file name. Only the current
|
|
||||||
fold will be open by default and while you press 'j' and 'k' to move between the
|
|
||||||
results if you hit other fold the last one will be closed and the current will
|
|
||||||
be open.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
>
|
|
||||||
let g:ack_autofold_results = 1
|
|
||||||
<
|
|
||||||
*g:ackpreview*
|
|
||||||
g:ackpreview
|
|
||||||
Default: 0
|
|
||||||
|
|
||||||
Use this option to automagically open the file with 'j' or 'k'.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
>
|
|
||||||
let g:ackpreview = 1
|
|
||||||
<
|
|
||||||
*g:ack_use_dispatch*
|
|
||||||
g:ack_use_dispatch
|
|
||||||
Default: 0
|
|
||||||
|
|
||||||
Use this option to use vim-dispatch to run searches in the background, with a
|
|
||||||
variety of execution backends for different systems.
|
|
||||||
|
|
||||||
Due to limitations in Dispatch at this time, location lists are unsupported
|
|
||||||
and result windows will appear before results are ready. Still, these may be
|
|
||||||
acceptable tradeoffs for very large projects where searches are slow.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
>
|
|
||||||
let g:ack_use_dispatch = 1
|
|
||||||
<
|
|
||||||
*g:ack_use_cword_for_empty_search*
|
|
||||||
g:ack_use_cword_for_empty_search
|
|
||||||
Default: 1
|
|
||||||
|
|
||||||
Use this option to enable blank searches to run against the word under the
|
|
||||||
cursor. When this option is not set, blank searches will only output an error
|
|
||||||
message.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
>
|
|
||||||
let g:ack_use_cword_for_empty_search = 0
|
|
||||||
<
|
|
||||||
==============================================================================
|
|
||||||
MAPPINGS *ack-mappings*
|
|
||||||
|
|
||||||
The following keyboard shortcuts are available in the |quickfix| and
|
|
||||||
|location-list| windows:
|
|
||||||
|
|
||||||
? display a quick summary of these mappings.
|
|
||||||
|
|
||||||
o open file (same as Enter).
|
|
||||||
|
|
||||||
O open file and close the quickfix window.
|
|
||||||
|
|
||||||
go preview file (open but maintain focus on ack.vim results).
|
|
||||||
|
|
||||||
t open in a new tab.
|
|
||||||
|
|
||||||
T open in new tab without moving to it.
|
|
||||||
|
|
||||||
h open in horizontal split.
|
|
||||||
|
|
||||||
H open in horizontal split, keeping focus on the results.
|
|
||||||
|
|
||||||
v open in vertical split.
|
|
||||||
|
|
||||||
gv open in vertical split, keeping focus on the results.
|
|
||||||
|
|
||||||
q close the quickfix window.
|
|
||||||
|
|
||||||
To adjust these, see |g:ack_mappings|.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Ignoring files *ack-ignore*
|
|
||||||
|
|
||||||
If you're using this plugin with ag, The Silver Searcher, bear in mind that:
|
|
||||||
|
|
||||||
- It ignores file patterns from your .gitignore and .hgignore.
|
|
||||||
|
|
||||||
- If there are other files in your source repository you don't wish to
|
|
||||||
search, you can add their patterns to an .agignore file.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
ISSUES AND FAQ *ack-issues-and-faq*
|
|
||||||
|
|
||||||
I don't want to jump to the first result automatically.~
|
|
||||||
|
|
||||||
Use `:Ack!`, with bang. If you want this behavior most of the time, you
|
|
||||||
might like an abbreviation or mapping in your personal config, something
|
|
||||||
like these:
|
|
||||||
>
|
|
||||||
cnoreabbrev Ack Ack!
|
|
||||||
nnoremap <Leader>a :Ack!<Space>
|
|
||||||
<
|
|
||||||
Most of the `:[L]Ack*` commands support this. Note that this behavior
|
|
||||||
follows the convention of Vim's built-in |:grep| and |:make| commands.
|
|
||||||
|
|
||||||
I use NERDTree and opening ack.vim results in a vertical split displacing it.~
|
|
||||||
|
|
||||||
You are probably using NERDTree with its default alignment at the left
|
|
||||||
side of the window. Set these custom mappings in your vimrc to work around
|
|
||||||
this:
|
|
||||||
>
|
|
||||||
let g:ack_mappings = {
|
|
||||||
\ 'v': '<C-W><CR><C-W>L<C-W>p<C-W>J<C-W>p',
|
|
||||||
\ 'gv': '<C-W><CR><C-W>L<C-W>p<C-W>J' }
|
|
||||||
<
|
|
||||||
This solution will be improved in the future.
|
|
||||||
|
|
||||||
Results show a mix of relative and absolute paths, making them hard to read.~
|
|
||||||
|
|
||||||
This is a quirk of Vim that can happen with plain |:vimgrep| too. You can
|
|
||||||
try this in your vimrc to work around it:
|
|
||||||
>
|
|
||||||
autocmd BufAdd * exe "cd" fnameescape(getcwd())
|
|
||||||
<
|
|
||||||
but for some users this may be disruptive to their Vim workflow. For more
|
|
||||||
details, see:
|
|
||||||
|
|
||||||
http://vi.stackexchange.com/a/4816/7174
|
|
||||||
https://github.com/mileszs/ack.vim/issues/143
|
|
||||||
|
|
||||||
vim:set et sw=4 ts=4 tw=78:
|
|
|
@ -1,15 +0,0 @@
|
||||||
==== ack.vim quick help ===============
|
|
||||||
|
|
||||||
*?:* a quick summary of these keys, repeat to close
|
|
||||||
*o:* to open (same as Enter)
|
|
||||||
*O:* to open and close the quickfix window
|
|
||||||
*go:* to preview file, open but maintain focus on ack.vim results
|
|
||||||
*t:* to open in new tab
|
|
||||||
*T:* to open in new tab without moving to it
|
|
||||||
*h:* to open in horizontal split
|
|
||||||
*H:* to open in horizontal split, keeping focus on the results
|
|
||||||
*v:* to open in vertical split
|
|
||||||
*gv:* to open in vertical split, keeping focus on the results
|
|
||||||
*q:* to close the quickfix window
|
|
||||||
|
|
||||||
========================================
|
|
|
@ -1,9 +0,0 @@
|
||||||
if exists("g:ack_autofold_results") && g:ack_autofold_results
|
|
||||||
setlocal foldlevel=0
|
|
||||||
setlocal foldmethod=expr
|
|
||||||
setlocal foldexpr=matchstr(getline(v:lnum),'^[^\|]\\+')==#matchstr(getline(v:lnum+1),'^[^\|]\\+')?1:'<1'
|
|
||||||
setlocal foldenable
|
|
||||||
setlocal foldclose=all
|
|
||||||
setlocal foldopen=all
|
|
||||||
nnoremap <buffer> j jzz
|
|
||||||
endif
|
|
|
@ -1,83 +0,0 @@
|
||||||
if exists('g:loaded_ack') || &cp
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ack_default_options")
|
|
||||||
let g:ack_default_options = " -s -H --nopager --nocolor --nogroup --column"
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Location of the ack utility
|
|
||||||
if !exists("g:ackprg")
|
|
||||||
if executable('ack-grep')
|
|
||||||
let g:ackprg = "ack-grep"
|
|
||||||
elseif executable('ack')
|
|
||||||
let g:ackprg = "ack"
|
|
||||||
else
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let g:ackprg .= g:ack_default_options
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ack_apply_qmappings")
|
|
||||||
let g:ack_apply_qmappings = !exists("g:ack_qhandler")
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ack_apply_lmappings")
|
|
||||||
let g:ack_apply_lmappings = !exists("g:ack_lhandler")
|
|
||||||
endif
|
|
||||||
|
|
||||||
let s:ack_mappings = {
|
|
||||||
\ "t": "<C-W><CR><C-W>T",
|
|
||||||
\ "T": "<C-W><CR><C-W>TgT<C-W>j",
|
|
||||||
\ "o": "<CR>",
|
|
||||||
\ "O": "<CR><C-W>p<C-W>c",
|
|
||||||
\ "go": "<CR><C-W>p",
|
|
||||||
\ "h": "<C-W><CR><C-W>K",
|
|
||||||
\ "H": "<C-W><CR><C-W>K<C-W>b",
|
|
||||||
\ "v": "<C-W><CR><C-W>H<C-W>b<C-W>J<C-W>t",
|
|
||||||
\ "gv": "<C-W><CR><C-W>H<C-W>b<C-W>J" }
|
|
||||||
|
|
||||||
if exists("g:ack_mappings")
|
|
||||||
let g:ack_mappings = extend(s:ack_mappings, g:ack_mappings)
|
|
||||||
else
|
|
||||||
let g:ack_mappings = s:ack_mappings
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ack_qhandler")
|
|
||||||
let g:ack_qhandler = "botright copen"
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ack_lhandler")
|
|
||||||
let g:ack_lhandler = "botright lopen"
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ackhighlight")
|
|
||||||
let g:ackhighlight = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ack_autoclose")
|
|
||||||
let g:ack_autoclose = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ack_autofold_results")
|
|
||||||
let g:ack_autofold_results = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ack_use_cword_for_empty_search")
|
|
||||||
let g:ack_use_cword_for_empty_search = 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
command! -bang -nargs=* -complete=file Ack call ack#Ack('grep<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file AckAdd call ack#Ack('grepadd<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file AckFromSearch call ack#AckFromSearch('grep<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file LAck call ack#Ack('lgrep<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file LAckAdd call ack#Ack('lgrepadd<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file AckFile call ack#Ack('grep<bang> -g', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=help AckHelp call ack#AckHelp('grep<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=help LAckHelp call ack#AckHelp('lgrep<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* AckWindow call ack#AckWindow('grep<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* LAckWindow call ack#AckWindow('lgrep<bang>', <q-args>)
|
|
||||||
|
|
||||||
let g:loaded_ack = 1
|
|
||||||
|
|
||||||
" vim:set et sw=2 ts=2 tw=78 fdm=marker
|
|
|
@ -16,7 +16,6 @@ from os import path
|
||||||
|
|
||||||
#--- Globals ----------------------------------------------
|
#--- Globals ----------------------------------------------
|
||||||
PLUGINS = """
|
PLUGINS = """
|
||||||
ack.vim https://github.com/mileszs/ack.vim
|
|
||||||
ag.vim https://github.com/rking/ag.vim
|
ag.vim https://github.com/rking/ag.vim
|
||||||
bufexplorer https://github.com/corntrace/bufexplorer
|
bufexplorer https://github.com/corntrace/bufexplorer
|
||||||
ctrlp.vim https://github.com/ctrlpvim/ctrlp.vim
|
ctrlp.vim https://github.com/ctrlpvim/ctrlp.vim
|
||||||
|
|
Loading…
Reference in a new issue