This commit is contained in:
parent
5f990400c2
commit
c4fbfe8aa8
20 changed files with 993 additions and 577 deletions
10
README.md
10
README.md
|
@ -66,7 +66,7 @@ Distraction free mode using [goyo.vim](https://github.com/junegunn/goyo.vim) and
|
||||||
|
|
||||||
I recommend reading the docs of these plugins to understand them better. Each plugin provides a much better Vim experience!
|
I recommend reading the docs of these plugins to understand them better. Each plugin provides a much better Vim experience!
|
||||||
|
|
||||||
* [ag.vim](https://github.com/rking/ag.vim): Vim plugin for `the_silver_searcher` (ag) -- a wicked fast grep
|
* [ack.vim](https://github.com/mileszs/ack.vim): Vim plugin for `the_silver_searcher` (ag) or ack -- a wicked fast grep
|
||||||
* [bufexplorer.zip](https://github.com/vim-scripts/bufexplorer.zip): Quickly and easily switch between buffers. This plugin can be opened with `<leader+o>`
|
* [bufexplorer.zip](https://github.com/vim-scripts/bufexplorer.zip): Quickly and easily switch between buffers. This plugin can be opened with `<leader+o>`
|
||||||
* [ctrlp.vim](https://github.com/ctrlpvim/ctrlp.vim): Fuzzy file, buffer, mru and tag finder. It's mapped to `<Ctrl+F>`
|
* [ctrlp.vim](https://github.com/ctrlpvim/ctrlp.vim): Fuzzy file, buffer, mru and tag finder. It's mapped to `<Ctrl+F>`
|
||||||
* [goyo.vim](https://github.com/junegunn/goyo.vim) and [vim-zenroom2](https://github.com/amix/vim-zenroom2):
|
* [goyo.vim](https://github.com/junegunn/goyo.vim) and [vim-zenroom2](https://github.com/amix/vim-zenroom2):
|
||||||
|
@ -195,9 +195,9 @@ Switch [CWD](http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file
|
||||||
|
|
||||||
map <leader>cd :cd %:p:h<cr>:pwd<cr>
|
map <leader>cd :cd %:p:h<cr>:pwd<cr>
|
||||||
|
|
||||||
Open `ag.vim` for fast search:
|
Open `ack.vim` for fast search:
|
||||||
|
|
||||||
map <leader>g :Ag
|
map <leader>g :Ack
|
||||||
|
|
||||||
Quickly open a buffer for scripbble:
|
Quickly open a buffer for scripbble:
|
||||||
|
|
||||||
|
@ -215,7 +215,7 @@ Visual mode pressing `*` or `#` searches for the current selection:
|
||||||
vnoremap <silent> * :call VisualSelection('f')<CR>
|
vnoremap <silent> * :call VisualSelection('f')<CR>
|
||||||
vnoremap <silent> # :call VisualSelection('b')<CR>
|
vnoremap <silent> # :call VisualSelection('b')<CR>
|
||||||
|
|
||||||
When you press gv you `ag.vim` after the selected text:
|
When you press gv you `Ack.vim` after the selected text:
|
||||||
|
|
||||||
vnoremap <silent> gv :call VisualSelection('gv', '')<CR>
|
vnoremap <silent> gv :call VisualSelection('gv', '')<CR>
|
||||||
|
|
||||||
|
@ -286,7 +286,7 @@ Shortcuts using `<leader>` instead of special characters:
|
||||||
### Cope
|
### Cope
|
||||||
Query `:help cope` if you are unsure what cope is. It's super useful!
|
Query `:help cope` if you are unsure what cope is. It's super useful!
|
||||||
|
|
||||||
When you search with `ag.vim`, display your results in cope by doing:
|
When you search with `Ack.vim`, display your results in cope by doing:
|
||||||
`<leader>cc`
|
`<leader>cc`
|
||||||
|
|
||||||
To go to the next search result do:
|
To go to the next search result do:
|
||||||
|
|
1
sources_non_forked/ack.vim/.gitignore
vendored
Normal file
1
sources_non_forked/ack.vim/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
tags
|
89
sources_non_forked/ack.vim/LICENSE
Normal file
89
sources_non_forked/ack.vim/LICENSE
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
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.
|
161
sources_non_forked/ack.vim/README.md
Normal file
161
sources_non_forked/ack.vim/README.md
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
# 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
|
246
sources_non_forked/ack.vim/autoload/ack.vim
Normal file
246
sources_non_forked/ack.vim/autoload/ack.vim
Normal file
|
@ -0,0 +1,246 @@
|
||||||
|
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
|
315
sources_non_forked/ack.vim/doc/ack.txt
Normal file
315
sources_non_forked/ack.vim/doc/ack.txt
Normal file
|
@ -0,0 +1,315 @@
|
||||||
|
*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:
|
15
sources_non_forked/ack.vim/doc/ack_quick_help.txt
Normal file
15
sources_non_forked/ack.vim/doc/ack_quick_help.txt
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
==== 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
|
||||||
|
|
||||||
|
========================================
|
9
sources_non_forked/ack.vim/ftplugin/qf.vim
Normal file
9
sources_non_forked/ack.vim/ftplugin/qf.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
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
|
83
sources_non_forked/ack.vim/plugin/ack.vim
Normal file
83
sources_non_forked/ack.vim/plugin/ack.vim
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
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
|
2
sources_non_forked/ag.vim/.gitignore
vendored
2
sources_non_forked/ag.vim/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
tags
|
|
||||||
ag-vim.tgz
|
|
|
@ -1,81 +0,0 @@
|
||||||
# ag.vim #
|
|
||||||
|
|
||||||
## Deprecated: See [this comment](https://github.com/rking/ag.vim/issues/124#issuecomment-227038003) for more info. Maybe try [ack.vim](https://github.com/mileszs/ack.vim#can-i-use-ag-the-silver-searcher-with-this) as an alternative. ##
|
|
||||||
|
|
||||||
This plugin is a front for ag, A.K.A.
|
|
||||||
[the_silver_searcher](https://github.com/ggreer/the_silver_searcher). Ag can
|
|
||||||
be used as a replacement for 153% of the uses of `ack`. This plugin will allow
|
|
||||||
you to run ag from vim, and shows the results in a split window.
|
|
||||||
|
|
||||||
## Installation ##
|
|
||||||
|
|
||||||
See [the_silver_searcher's README](https://github.com/ggreer/the_silver_searcher#installing) for its installation instructions (if you haven't installed it already).
|
|
||||||
|
|
||||||
You have to first install [ag](https://github.com/ggreer/the_silver_searcher), itself. On Mac+Homebrew, Gentoo Linux, several others, there's package named `the_silver_searcher`, but if your OS/distro don't have one, the GitHub repo installs fine:
|
|
||||||
|
|
||||||
Vim has various ways of installing plugins, the standard way is in [the documentation](http://vimdoc.sourceforge.net/htmldoc/usr_05.html#plugin), but most people use a plugin to manage their plugins. If you don't already have a preferred plugin manager plugin, why not try one of the following?
|
|
||||||
- [vim-plug](https://github.com/junegunn/vim-plug#readme)
|
|
||||||
- [vim-pathogen](https://github.com/tpope/vim-pathogen#readme)
|
|
||||||
- [Vundle.vim](https://github.com/gmarik/Vundle.vim#readme)
|
|
||||||
- Or, if you don't use any sort of Vim plugin management:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cd ~/.vim/bundle && git clone https://github.com/rking/ag.vim ag && echo "set runtimepath^=~/.vim/bundle/ag" >> ~/.vimrc
|
|
||||||
```
|
|
||||||
|
|
||||||
Then open vim and run `:helptags ~/.vim/bundle/ag/doc`.
|
|
||||||
|
|
||||||
### Configuration ###
|
|
||||||
|
|
||||||
You can specify a custom ag name and path in your .vimrc like so:
|
|
||||||
|
|
||||||
let g:ag_prg="<custom-ag-path-goes-here> --vimgrep"
|
|
||||||
|
|
||||||
You can configure ag.vim to always start searching from your project root
|
|
||||||
instead of the cwd
|
|
||||||
|
|
||||||
let g:ag_working_path_mode="r"
|
|
||||||
|
|
||||||
## Usage ##
|
|
||||||
|
|
||||||
:Ag [options] {pattern} [{directory}]
|
|
||||||
|
|
||||||
Search recursively in {directory} (which defaults to the current directory) for the {pattern}.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
Just like where you use :grep, :grepadd, :lgrep, and :lgrepadd, you can use `:Ag`, `:AgAdd`, `:LAg`, and `:LAgAdd` respectively. (See `doc/ag.txt`, or install and `:h Ag` for more information.)
|
|
||||||
|
|
||||||
### Gotchas ###
|
|
||||||
|
|
||||||
Some characters have special meaning, and need to be escaped your search pattern. For instance, '#'. You have to escape it like this `:Ag '\\\#define foo'` to search for `#define foo`. (From [blueyed in issue #5](https://github.com/mileszs/ack.vim/issues/5).)
|
|
||||||
|
|
||||||
Sometimes `git grep` is even faster, though in my experience it's not noticeably so.
|
|
||||||
|
|
||||||
### Keyboard Shortcuts ###
|
|
||||||
|
|
||||||
In the quickfix window, you can use:
|
|
||||||
|
|
||||||
e to open file and close the quickfix window
|
|
||||||
o to open (same as enter)
|
|
||||||
go to preview file (open but maintain focus on ag.vim results)
|
|
||||||
t to open in new tab
|
|
||||||
T to open in new tab silently
|
|
||||||
h to open in horizontal split
|
|
||||||
H to open in horizontal split silently
|
|
||||||
v to open in vertical split
|
|
||||||
gv to open in vertical split silently
|
|
||||||
q to close the quickfix window
|
|
||||||
|
|
||||||
### Related Plugin ###
|
|
||||||
[vim-ag-anything](https://github.com/Chun-Yang/vim-ag-anything) adds an 'ga' action to search any text object.
|
|
||||||
|
|
||||||
### Acknowledgements ###
|
|
||||||
|
|
||||||
This Vim plugin is derived (and by derived, I mean copied, almost entirely)
|
|
||||||
from [milesz's ack.vim](https://github.com/mileszs/ack.vim), which I also
|
|
||||||
recommend installing since you might be in a situation where you have ack but
|
|
||||||
not ag, and don't want to stop to install ag. Also, ack supports `--type`, and
|
|
||||||
a few other features.
|
|
|
@ -1,3 +0,0 @@
|
||||||
task :tgz do
|
|
||||||
sh 'cd ..; tar czvf ag/ag-vim.tgz ag/{plugin,autoload,doc}'
|
|
||||||
end
|
|
|
@ -1,234 +0,0 @@
|
||||||
" NOTE: You must, of course, install ag / the_silver_searcher
|
|
||||||
|
|
||||||
" FIXME: Delete deprecated options below on or after 2016-4 (6 months from when the deprecation warning was added) {{{
|
|
||||||
|
|
||||||
if exists("g:agprg")
|
|
||||||
let g:ag_prg = g:agprg
|
|
||||||
echohl WarningMsg
|
|
||||||
call input('g:agprg is deprecated and will be removed. Please use g:ag_prg')
|
|
||||||
echohl None
|
|
||||||
endif
|
|
||||||
|
|
||||||
if exists("g:aghighlight")
|
|
||||||
let g:ag_highlight = g:aghighlight
|
|
||||||
echohl WarningMsg
|
|
||||||
call input('g:aghighlight is deprecated and will be removed. Please use g:ag_highlight')
|
|
||||||
echohl None
|
|
||||||
endif
|
|
||||||
|
|
||||||
if exists("g:agformat")
|
|
||||||
let g:ag_format = g:agformat
|
|
||||||
echohl WarningMsg
|
|
||||||
call input('g:agformat is deprecated and will be removed. Please use g:ag_format')
|
|
||||||
echohl None
|
|
||||||
endif
|
|
||||||
|
|
||||||
" }}} FIXME: Delete the deprecated options above on or after 15-7 (6 months from when they were changed)
|
|
||||||
|
|
||||||
" Location of the ag utility
|
|
||||||
if !exists("g:ag_prg")
|
|
||||||
" --vimgrep (consistent output we can parse) is available from version 0.25.0+
|
|
||||||
if split(system("ag --version"), "[ \n\r\t]")[2] =~ '\d\+.\(\(2[5-9]\)\|\([3-9][0-9]\)\)\(.\d\+\)\?'
|
|
||||||
let g:ag_prg="ag --vimgrep"
|
|
||||||
else
|
|
||||||
" --noheading seems odd here, but see https://github.com/ggreer/the_silver_searcher/issues/361
|
|
||||||
let g:ag_prg="ag --column --nogroup --noheading"
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ag_apply_qmappings")
|
|
||||||
let g:ag_apply_qmappings=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ag_apply_lmappings")
|
|
||||||
let g:ag_apply_lmappings=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ag_qhandler")
|
|
||||||
let g:ag_qhandler="botright copen"
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ag_lhandler")
|
|
||||||
let g:ag_lhandler="botright lopen"
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ag_mapping_message")
|
|
||||||
let g:ag_mapping_message=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !exists("g:ag_working_path_mode")
|
|
||||||
let g:ag_working_path_mode = 'c'
|
|
||||||
endif
|
|
||||||
|
|
||||||
function! ag#AgBuffer(cmd, args)
|
|
||||||
let l:bufs = filter(range(1, bufnr('$')), 'buflisted(v:val)')
|
|
||||||
let l:files = []
|
|
||||||
for buf in l:bufs
|
|
||||||
let l:file = fnamemodify(bufname(buf), ':p')
|
|
||||||
if !isdirectory(l:file)
|
|
||||||
call add(l:files, l:file)
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
call ag#Ag(a:cmd, a:args . ' ' . join(l:files, ' '))
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ag#Ag(cmd, args)
|
|
||||||
let l:ag_executable = get(split(g:ag_prg, " "), 0)
|
|
||||||
|
|
||||||
" Ensure that `ag` is installed
|
|
||||||
if !executable(l:ag_executable)
|
|
||||||
echoe "Ag command '" . l:ag_executable . "' was not found. Is the silver searcher installed and on your $PATH?"
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
" 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
|
|
||||||
|
|
||||||
if empty(l:grepargs)
|
|
||||||
echo "Usage: ':Ag {pattern}' (or just :Ag to search for the word under the cursor). See ':help :Ag' for more information."
|
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Format, used to manage column jump
|
|
||||||
if a:cmd =~# '-g$'
|
|
||||||
let s:ag_format_backup=g:ag_format
|
|
||||||
let g:ag_format="%f"
|
|
||||||
elseif exists("s:ag_format_backup")
|
|
||||||
let g:ag_format=s:ag_format_backup
|
|
||||||
elseif !exists("g:ag_format")
|
|
||||||
let g:ag_format="%f:%l:%c:%m"
|
|
||||||
endif
|
|
||||||
|
|
||||||
let l:grepprg_bak=&grepprg
|
|
||||||
let l:grepformat_bak=&grepformat
|
|
||||||
let l:t_ti_bak=&t_ti
|
|
||||||
let l:t_te_bak=&t_te
|
|
||||||
try
|
|
||||||
let &grepprg=g:ag_prg
|
|
||||||
let &grepformat=g:ag_format
|
|
||||||
set t_ti=
|
|
||||||
set t_te=
|
|
||||||
if g:ag_working_path_mode ==? 'r' " Try to find the projectroot for current buffer
|
|
||||||
let l:cwd_back = getcwd()
|
|
||||||
let l:cwd = s:guessProjectRoot()
|
|
||||||
try
|
|
||||||
exe "lcd ".l:cwd
|
|
||||||
catch
|
|
||||||
echom 'Failed to change directory to:'.l:cwd
|
|
||||||
finally
|
|
||||||
silent! execute a:cmd . " " . escape(l:grepargs, '|')
|
|
||||||
exe "lcd ".l:cwd_back
|
|
||||||
endtry
|
|
||||||
else " Someone chose an undefined value or 'c' so we revert to the default
|
|
||||||
silent! execute a:cmd . " " . escape(l:grepargs, '|')
|
|
||||||
endif
|
|
||||||
finally
|
|
||||||
let &grepprg=l:grepprg_bak
|
|
||||||
let &grepformat=l:grepformat_bak
|
|
||||||
let &t_ti=l:t_ti_bak
|
|
||||||
let &t_te=l:t_te_bak
|
|
||||||
endtry
|
|
||||||
|
|
||||||
if a:cmd =~# '^l'
|
|
||||||
let l:match_count = len(getloclist(winnr()))
|
|
||||||
else
|
|
||||||
let l:match_count = len(getqflist())
|
|
||||||
endif
|
|
||||||
|
|
||||||
if a:cmd =~# '^l' && l:match_count
|
|
||||||
exe g:ag_lhandler
|
|
||||||
let l:apply_mappings = g:ag_apply_lmappings
|
|
||||||
let l:matches_window_prefix = 'l' " we're using the location list
|
|
||||||
elseif l:match_count
|
|
||||||
exe g:ag_qhandler
|
|
||||||
let l:apply_mappings = g:ag_apply_qmappings
|
|
||||||
let l:matches_window_prefix = 'c' " we're using the quickfix window
|
|
||||||
endif
|
|
||||||
|
|
||||||
" If highlighting is on, highlight the search keyword.
|
|
||||||
if exists('g:ag_highlight')
|
|
||||||
let @/ = matchstr(a:args, "\\v(-)\@<!(\<)\@<=\\w+|['\"]\\zs.{-}\\ze['\"]")
|
|
||||||
call feedkeys(":let &hlsearch=1 \| echo \<CR>", 'n')
|
|
||||||
end
|
|
||||||
|
|
||||||
redraw!
|
|
||||||
|
|
||||||
if l:match_count
|
|
||||||
if l:apply_mappings
|
|
||||||
nnoremap <silent> <buffer> h <C-W><CR><C-w>K
|
|
||||||
nnoremap <silent> <buffer> H <C-W><CR><C-w>K<C-w>b
|
|
||||||
nnoremap <silent> <buffer> o <CR>
|
|
||||||
nnoremap <silent> <buffer> t <C-w><CR><C-w>T
|
|
||||||
nnoremap <silent> <buffer> T <C-w><CR><C-w>TgT<C-W><C-W>
|
|
||||||
nnoremap <silent> <buffer> v <C-w><CR><C-w>H<C-W>b<C-W>J<C-W>t
|
|
||||||
|
|
||||||
exe 'nnoremap <silent> <buffer> e <CR><C-w><C-w>:' . l:matches_window_prefix .'close<CR>'
|
|
||||||
exe 'nnoremap <silent> <buffer> go <CR>:' . l:matches_window_prefix . 'open<CR>'
|
|
||||||
exe 'nnoremap <silent> <buffer> q :' . l:matches_window_prefix . 'close<CR>'
|
|
||||||
|
|
||||||
exe 'nnoremap <silent> <buffer> gv :let b:height=winheight(0)<CR><C-w><CR><C-w>H:' . l:matches_window_prefix . 'open<CR><C-w>J:exe printf(":normal %d\<lt>c-w>_", b:height)<CR>'
|
|
||||||
" Interpretation:
|
|
||||||
" :let b:height=winheight(0)<CR> Get the height of the quickfix/location list window
|
|
||||||
" <CR><C-w> Open the current item in a new split
|
|
||||||
" <C-w>H Slam the newly opened window against the left edge
|
|
||||||
" :copen<CR> -or- :lopen<CR> Open either the quickfix window or the location list (whichever we were using)
|
|
||||||
" <C-w>J Slam the quickfix/location list window against the bottom edge
|
|
||||||
" :exe printf(":normal %d\<lt>c-w>_", b:height)<CR> Restore the quickfix/location list window's height from before we opened the match
|
|
||||||
|
|
||||||
if g:ag_mapping_message && l:apply_mappings
|
|
||||||
echom "ag.vim keys: q=quit <cr>/e/t/h/v=enter/edit/tab/split/vsplit go/T/H/gv=preview versions of same"
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
else " Close the split window automatically:
|
|
||||||
cclose
|
|
||||||
lclose
|
|
||||||
echohl WarningMsg
|
|
||||||
echom 'No matches for "'.a:args.'"'
|
|
||||||
echohl None
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ag#AgFromSearch(cmd, args)
|
|
||||||
let search = getreg('/')
|
|
||||||
" translate vim regular expression to perl regular expression.
|
|
||||||
let search = substitute(search,'\(\\<\|\\>\)','\\b','g')
|
|
||||||
call ag#Ag(a:cmd, '"' . search .'" '. a:args)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ag#GetDocLocations()
|
|
||||||
let dp = ''
|
|
||||||
for p in split(&runtimepath,',')
|
|
||||||
let p = p.'doc/'
|
|
||||||
if isdirectory(p)
|
|
||||||
let dp = p.'*.txt '.dp
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
return dp
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! ag#AgHelp(cmd,args)
|
|
||||||
let args = a:args.' '.ag#GetDocLocations()
|
|
||||||
call ag#Ag(a:cmd,args)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! s:guessProjectRoot()
|
|
||||||
let l:splitsearchdir = split(getcwd(), "/")
|
|
||||||
|
|
||||||
while len(l:splitsearchdir) > 2
|
|
||||||
let l:searchdir = '/'.join(l:splitsearchdir, '/').'/'
|
|
||||||
for l:marker in ['.rootdir', '.git', '.hg', '.svn', 'bzr', '_darcs', 'build.xml']
|
|
||||||
" found it! Return the dir
|
|
||||||
if filereadable(l:searchdir.l:marker) || isdirectory(l:searchdir.l:marker)
|
|
||||||
return l:searchdir
|
|
||||||
endif
|
|
||||||
endfor
|
|
||||||
let l:splitsearchdir = l:splitsearchdir[0:-2] " Splice the list to get rid of the tail directory
|
|
||||||
endwhile
|
|
||||||
|
|
||||||
" Nothing found, fallback to current working dir
|
|
||||||
return getcwd()
|
|
||||||
endfunction
|
|
|
@ -1,174 +0,0 @@
|
||||||
*ag.txt* Plugin that integrates ag with Vim
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
INTRODUCTION *ag*
|
|
||||||
|
|
||||||
This plugin is a front for the_silver_searcher: ag. Ag can be used as a
|
|
||||||
replacement for ack. This plugin will allow you to run ag from vim, and shows
|
|
||||||
the results in a split window.
|
|
||||||
|
|
||||||
:Ag[!] [options] {pattern} [{directory}] *:Ag*
|
|
||||||
|
|
||||||
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
|
|
||||||
error is jumped to.
|
|
||||||
|
|
||||||
:AgBuffer[!] [options] {pattern} *:AgBuffer*
|
|
||||||
|
|
||||||
Search for {pattern} in all open buffers. Behaves just like the |:grep|
|
|
||||||
command, but will open the |Quickfix| window for you. If [!] is not given
|
|
||||||
the first error is jumped to.
|
|
||||||
|
|
||||||
Note: this will not find changes in modified buffers, since ag can only
|
|
||||||
find what is on disk! You can save buffers automatically when searching
|
|
||||||
with the 'autowrite' option. A buffer will be ignored if it is a directory
|
|
||||||
(an explorer, like netrw).
|
|
||||||
|
|
||||||
:AgAdd [options] {pattern} [{directory}] *:AgAdd*
|
|
||||||
|
|
||||||
Just like |:Ag|, but instead of making a new list, the matches are
|
|
||||||
appended to the current |quickfix| list.
|
|
||||||
|
|
||||||
:AgFromSearch [{directory}] *:AgFromSearch*
|
|
||||||
|
|
||||||
Just like |:Ag| but the pattern is from previous search.
|
|
||||||
|
|
||||||
:LAg [options] {pattern} [{directory}] *:LAg*
|
|
||||||
|
|
||||||
Just like |:Ag| but instead of the |quickfix| list, matches are placed in
|
|
||||||
the current |location-list|.
|
|
||||||
|
|
||||||
:LAgBuffer [options] {pattern} *:LAgBuffer*
|
|
||||||
|
|
||||||
Just like |:AgBuffer| but instead of the |quickfix| list, matches are
|
|
||||||
placed in the current |location-list|.
|
|
||||||
|
|
||||||
:LAgAdd [options] {pattern} [{directory}] *:LAgAdd*
|
|
||||||
|
|
||||||
Just like |:AgAdd| but instead of the |quickfix| list, matches are added
|
|
||||||
to the current |location-list|
|
|
||||||
|
|
||||||
:AgFile [options] {pattern} [{directory}] *:AgFile*
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
:AgHelp[!] [options] {pattern} *:AgHelp*
|
|
||||||
|
|
||||||
Search vim documentation files for the {pattern}. Behaves just like the
|
|
||||||
|:Ag| command, but searches only vim documentation .txt files
|
|
||||||
|
|
||||||
:LAgHelp [options] {pattern} *:LAgHelp*
|
|
||||||
|
|
||||||
Just like |:AgHelp| 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.
|
|
||||||
|
|
||||||
See http://geoff.greer.fm/2011/12/27/the-silver-searcher-better-than-ack/ for
|
|
||||||
more information.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
OPTIONS *ag-options*
|
|
||||||
|
|
||||||
*g:ag_prg*
|
|
||||||
The location of the Ag program, and any options you want passed to it before
|
|
||||||
searching. Default: "ag --vimgrep" (for parsable output). Example: >
|
|
||||||
let g:ag_prg="ag --vimgrep --smart-case"
|
|
||||||
<
|
|
||||||
Note: the `--vimgrep` option was added in Ag 0.25.0. If ag.vim detects that
|
|
||||||
you're using a lower version, the following default will be used instead: >
|
|
||||||
let g:ag_prg="ag --column --nogroup --noheading"
|
|
||||||
<
|
|
||||||
This works around inconsistent behaviors in earlier Ag versions, but it is
|
|
||||||
recommended that you upgrade if possible for a better experience. `--vimgrep`
|
|
||||||
supports multiple matches on the same line of text, for example.
|
|
||||||
|
|
||||||
For background, see: https://github.com/rking/ag.vim/pull/88
|
|
||||||
|
|
||||||
*g:ag_working_path_mode*
|
|
||||||
A mapping that describes where ag will be run. Default is the current working
|
|
||||||
directory. Specifying 'r' as the argument will tell it to run from the project
|
|
||||||
rootdirectory. For now any other mapping will result to the default.
|
|
||||||
Example:
|
|
||||||
let g:ag_working_path_mode='r'
|
|
||||||
|
|
||||||
*g:ag_highlight*
|
|
||||||
If 1, highlight the search terms after searching. Default: 0. Example: >
|
|
||||||
let g:ag_highlight=1
|
|
||||||
<
|
|
||||||
|
|
||||||
*g:ag_format*
|
|
||||||
Format to recognize the matches. See 'errorformat' for more info. Default:
|
|
||||||
"%f" when searching for files, "%f:%l:%c:%m" if not otherwise set. For
|
|
||||||
example, if your `g:ag_prg` is set to just "ag" (no column numbers in the
|
|
||||||
output, so when you jump to a match your cursor will be on the start of the
|
|
||||||
line): >
|
|
||||||
let g:ag_format="%f:%l:%m"
|
|
||||||
<
|
|
||||||
|
|
||||||
*g:ag_apply_lmappings*
|
|
||||||
Whether or not to add custom mappings to location list windows opened by this
|
|
||||||
plugin. Only applies if you're using the location list. Default 1. Example: >
|
|
||||||
let g:ag_apply_lmappings=0
|
|
||||||
<
|
|
||||||
|
|
||||||
*g:ag_apply_qmappings*
|
|
||||||
Whether or not to add custom mappings to quickfix windows opened by this
|
|
||||||
plugin. Only applies if you're using the error list. Default 1. Example: >
|
|
||||||
let g:ag_apply_qmappings=0
|
|
||||||
<
|
|
||||||
|
|
||||||
*g:ag_lhandler*
|
|
||||||
A custom command used to open the location list after it's populated.
|
|
||||||
Default: "botright lopen". You might want to set this to change where the
|
|
||||||
location list is opened, or what size it is. Example: >
|
|
||||||
let g:ag_lhandler="topleft lopen"
|
|
||||||
<
|
|
||||||
|
|
||||||
*g:ag_qhandler*
|
|
||||||
A custom command used to open the error list after it's populated. Default:
|
|
||||||
"botright copen". You might want to set this to change where the quickfix
|
|
||||||
window is opened, or what size it is. Example: >
|
|
||||||
let g:ag_qhandler="copen 20"
|
|
||||||
<
|
|
||||||
|
|
||||||
*g:ag_mapping_message*
|
|
||||||
Whether or not to show the message explaining the extra mappings that are
|
|
||||||
added to the results list this plugin populates. This message is not shown if
|
|
||||||
the mappings are not applied (see |g:ag_apply_qmappings| and
|
|
||||||
|g:ag_apply_lmappings| for more info. Default 1. Example: >
|
|
||||||
let g:ag_mapping_message=0
|
|
||||||
<
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
MAPPINGS *ag-mappings*
|
|
||||||
|
|
||||||
The following keyboard shortcuts are available in the quickfix window:
|
|
||||||
|
|
||||||
e open file and close the quickfix window.
|
|
||||||
|
|
||||||
o open file (same as enter).
|
|
||||||
|
|
||||||
go preview file (open but maintain focus on ag.vim results).
|
|
||||||
|
|
||||||
t open in a new tab.
|
|
||||||
|
|
||||||
T open in new tab silently.
|
|
||||||
|
|
||||||
h open in horizontal split.
|
|
||||||
|
|
||||||
H open in horizontal split silently.
|
|
||||||
|
|
||||||
v open in vertical split.
|
|
||||||
|
|
||||||
gv open in vertical split silently.
|
|
||||||
|
|
||||||
q close the quickfix window.
|
|
||||||
|
|
||||||
vim:tw=78:fo=tcq2:ft=help:norl:
|
|
|
@ -1,11 +0,0 @@
|
||||||
" NOTE: You must, of course, install ag / the_silver_searcher
|
|
||||||
command! -bang -nargs=* -complete=file Ag call ag#Ag('grep<bang>',<q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file AgBuffer call ag#AgBuffer('grep<bang>',<q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file AgAdd call ag#Ag('grepadd<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file AgFromSearch call ag#AgFromSearch('grep<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file LAg call ag#Ag('lgrep<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file LAgBuffer call ag#AgBuffer('lgrep<bang>',<q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file LAgAdd call ag#Ag('lgrepadd<bang>', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=file AgFile call ag#Ag('grep<bang> -g', <q-args>)
|
|
||||||
command! -bang -nargs=* -complete=help AgHelp call ag#AgHelp('grep<bang>',<q-args>)
|
|
||||||
command! -bang -nargs=* -complete=help LAgHelp call ag#AgHelp('lgrep<bang>',<q-args>)
|
|
|
@ -384,7 +384,7 @@ function! snipMate#DefaultPool(scopes, trigger, result) abort
|
||||||
let s:lookup_state.extends = []
|
let s:lookup_state.extends = []
|
||||||
|
|
||||||
for expr in s:snippet_filenames(scope, escape(a:trigger, "*[]?{}`'$|#%"))
|
for expr in s:snippet_filenames(scope, escape(a:trigger, "*[]?{}`'$|#%"))
|
||||||
for path in g:snipMate.snippet_dirs
|
for path in s:snippet_dirs()
|
||||||
for file in s:Glob(path, expr)
|
for file in s:Glob(path, expr)
|
||||||
source `=file`
|
source `=file`
|
||||||
endfor
|
endfor
|
||||||
|
@ -416,6 +416,10 @@ fun! snipMate#GetSnippets(scopes, trigger) abort
|
||||||
return result
|
return result
|
||||||
endf
|
endf
|
||||||
|
|
||||||
|
function! s:snippet_dirs() abort
|
||||||
|
return get(g:snipMate, 'snippet_dirs', split(&rtp, ','))
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! snipMate#OpenSnippetFiles() abort
|
function! snipMate#OpenSnippetFiles() abort
|
||||||
let files = []
|
let files = []
|
||||||
let scopes_done = []
|
let scopes_done = []
|
||||||
|
@ -425,7 +429,7 @@ function! snipMate#OpenSnippetFiles() abort
|
||||||
let files += s:snippet_filenames(scope, '')
|
let files += s:snippet_filenames(scope, '')
|
||||||
endfor
|
endfor
|
||||||
call filter(files, "v:val !~# '\\*'")
|
call filter(files, "v:val !~# '\\*'")
|
||||||
for path in g:snipMate.snippet_dirs
|
for path in s:snippet_dirs()
|
||||||
let fullpaths = map(copy(files), 'printf("%s/%s", path, v:val)')
|
let fullpaths = map(copy(files), 'printf("%s/%s", path, v:val)')
|
||||||
let exists += filter(copy(fullpaths), 'filereadable(v:val)')
|
let exists += filter(copy(fullpaths), 'filereadable(v:val)')
|
||||||
let notexists += map(filter(copy(fullpaths),
|
let notexists += map(filter(copy(fullpaths),
|
||||||
|
|
|
@ -93,8 +93,7 @@ endif
|
||||||
let g:snipMate['get_snippets'] = get(g:snipMate, 'get_snippets', funcref#Function("snipMate#GetSnippets"))
|
let g:snipMate['get_snippets'] = get(g:snipMate, 'get_snippets', funcref#Function("snipMate#GetSnippets"))
|
||||||
|
|
||||||
" List of paths where snippets/ dirs are located
|
" List of paths where snippets/ dirs are located
|
||||||
let g:snipMate['snippet_dirs'] = get(g:snipMate, 'snippet_dirs', split(&rtp, ','))
|
if exists('g:snipMate.snippet_dirs') && type(g:snipMate['snippet_dirs']) != type([])
|
||||||
if type(g:snipMate['snippet_dirs']) != type([])
|
|
||||||
echohl WarningMsg
|
echohl WarningMsg
|
||||||
echom "g:snipMate['snippet_dirs'] must be a List"
|
echom "g:snipMate['snippet_dirs'] must be a List"
|
||||||
echohl None
|
echohl None
|
||||||
|
|
|
@ -16,7 +16,7 @@ from os import path
|
||||||
|
|
||||||
#--- Globals ----------------------------------------------
|
#--- Globals ----------------------------------------------
|
||||||
PLUGINS = """
|
PLUGINS = """
|
||||||
ag.vim https://github.com/rking/ag.vim
|
ack.vim https://github.com/mileszs/ack.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
|
||||||
mayansmoke https://github.com/vim-scripts/mayansmoke
|
mayansmoke https://github.com/vim-scripts/mayansmoke
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
" http://amix.dk - amix@amix.dk
|
" http://amix.dk - amix@amix.dk
|
||||||
"
|
"
|
||||||
" Version:
|
" Version:
|
||||||
" 5.0 - 29/05/12 15:43:36
|
" 6.0 - 01/04/17 14:24:34
|
||||||
"
|
"
|
||||||
" Blog_post:
|
" Blog_post:
|
||||||
" http://amix.dk/blog/post/19691#The-ultimate-Vim-configuration-on-Github
|
" http://amix.dk/blog/post/19691#The-ultimate-Vim-configuration-on-Github
|
||||||
|
@ -313,36 +313,6 @@ if has("autocmd")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
||||||
" => Ag searching and cope displaying
|
|
||||||
" requires ag.vim - it's much better than vimgrep/grep
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
||||||
" When you press gv you Ag after the selected text
|
|
||||||
vnoremap <silent> gv :call VisualSelection('gv', '')<CR>
|
|
||||||
|
|
||||||
" Open Ag and put the cursor in the right position
|
|
||||||
map <leader>g :Ag
|
|
||||||
|
|
||||||
" When you press <leader>r you can search and replace the selected text
|
|
||||||
vnoremap <silent> <leader>r :call VisualSelection('replace', '')<CR>
|
|
||||||
|
|
||||||
" Do :help cope if you are unsure what cope is. It's super useful!
|
|
||||||
"
|
|
||||||
" When you search with Ag, display your results in cope by doing:
|
|
||||||
" <leader>cc
|
|
||||||
"
|
|
||||||
" To go to the next search result do:
|
|
||||||
" <leader>n
|
|
||||||
"
|
|
||||||
" To go to the previous search results do:
|
|
||||||
" <leader>p
|
|
||||||
"
|
|
||||||
map <leader>cc :botright cope<cr>
|
|
||||||
map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg
|
|
||||||
map <leader>n :cn<cr>
|
|
||||||
map <leader>p :cp<cr>
|
|
||||||
|
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
" => Spell checking
|
" => Spell checking
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
@ -372,35 +342,9 @@ map <leader>x :e ~/buffer.md<cr>
|
||||||
map <leader>pp :setlocal paste!<cr>
|
map <leader>pp :setlocal paste!<cr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
" => Helper functions
|
" => Helper functions
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
function! CmdLine(str)
|
|
||||||
exe "menu Foo.Bar :" . a:str
|
|
||||||
emenu Foo.Bar
|
|
||||||
unmenu Foo
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! VisualSelection(direction, extra_filter) range
|
|
||||||
let l:saved_reg = @"
|
|
||||||
execute "normal! vgvy"
|
|
||||||
|
|
||||||
let l:pattern = escape(@", "\\/.*'$^~[]")
|
|
||||||
let l:pattern = substitute(l:pattern, "\n$", "", "")
|
|
||||||
|
|
||||||
if a:direction == 'gv'
|
|
||||||
call CmdLine("Ag '" . l:pattern . "' " )
|
|
||||||
elseif a:direction == 'replace'
|
|
||||||
call CmdLine("%s" . '/'. l:pattern . '/')
|
|
||||||
endif
|
|
||||||
|
|
||||||
let @/ = l:pattern
|
|
||||||
let @" = l:saved_reg
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
" Returns true if paste mode is enabled
|
" Returns true if paste mode is enabled
|
||||||
function! HasPaste()
|
function! HasPaste()
|
||||||
if &paste
|
if &paste
|
||||||
|
@ -429,8 +373,3 @@ function! <SID>BufcloseCloseIt()
|
||||||
execute("bdelete! ".l:currentBufNum)
|
execute("bdelete! ".l:currentBufNum)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Make VIM remember position in file after reopen
|
|
||||||
" if has("autocmd")
|
|
||||||
" au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
|
|
||||||
"endif
|
|
||||||
|
|
|
@ -108,6 +108,41 @@ iab xdate <c-r>=strftime("%d/%m/%y %H:%M:%S")<cr>
|
||||||
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
|
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
|
||||||
|
|
||||||
|
|
||||||
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
" => Ack searching and cope displaying
|
||||||
|
" requires ack.vim - it's much better than vimgrep/grep
|
||||||
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
" Use the the_silver_searcher if possible (much faster than Ack)
|
||||||
|
if executable('ag')
|
||||||
|
let g:ackprg = 'ag --vimgrep --smart-case'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" When you press gv you Ack after the selected text
|
||||||
|
vnoremap <silent> gv :call VisualSelection('gv', '')<CR>
|
||||||
|
|
||||||
|
" Open Ack and put the cursor in the right position
|
||||||
|
map <leader>g :Ack
|
||||||
|
|
||||||
|
" When you press <leader>r you can search and replace the selected text
|
||||||
|
vnoremap <silent> <leader>r :call VisualSelection('replace', '')<CR>
|
||||||
|
|
||||||
|
" Do :help cope if you are unsure what cope is. It's super useful!
|
||||||
|
"
|
||||||
|
" When you search with Ack, display your results in cope by doing:
|
||||||
|
" <leader>cc
|
||||||
|
"
|
||||||
|
" To go to the next search result do:
|
||||||
|
" <leader>n
|
||||||
|
"
|
||||||
|
" To go to the previous search results do:
|
||||||
|
" <leader>p
|
||||||
|
"
|
||||||
|
map <leader>cc :botright cope<cr>
|
||||||
|
map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg
|
||||||
|
map <leader>n :cn<cr>
|
||||||
|
map <leader>p :cp<cr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
" => Helper functions
|
" => Helper functions
|
||||||
|
@ -135,3 +170,28 @@ endfunc
|
||||||
func! CurrentFileDir(cmd)
|
func! CurrentFileDir(cmd)
|
||||||
return a:cmd . " " . expand("%:p:h") . "/"
|
return a:cmd . " " . expand("%:p:h") . "/"
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
function! CmdLine(str)
|
||||||
|
exe "menu Foo.Bar :" . a:str
|
||||||
|
emenu Foo.Bar
|
||||||
|
unmenu Foo
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! VisualSelection(direction, extra_filter) range
|
||||||
|
let l:saved_reg = @"
|
||||||
|
execute "normal! vgvy"
|
||||||
|
|
||||||
|
let l:pattern = escape(@", "\\/.*'$^~[]")
|
||||||
|
let l:pattern = substitute(l:pattern, "\n$", "", "")
|
||||||
|
|
||||||
|
if a:direction == 'gv'
|
||||||
|
call CmdLine("Ack '" . l:pattern . "' " )
|
||||||
|
elseif a:direction == 'replace'
|
||||||
|
call CmdLine("%s" . '/'. l:pattern . '/')
|
||||||
|
endif
|
||||||
|
|
||||||
|
let @/ = l:pattern
|
||||||
|
let @" = l:saved_reg
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue