*ack.txt* Plugin that integrates ack with Vim ============================================================================== Author: Antoine Imbert *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. 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": "T", \ "T": "TgTj", \ "o": "", \ "O": ":ccl", \ "go": "j", \ "h": "K", \ "H": "Kb", \ "v": "HbJt", \ "gv": "HbJ" } 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": "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 a :Ack! < 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': 'LpJp', \ 'gv': 'LpJ' } < 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: