SearchSpecial : Generic functions for special search modes.
| script karma
Downloaded by 153
Comments, bugs, improvements
script versions (upload new version)
The built-in search via /, n, and N does its job. But sometimes, it
would be nice to have a custom search that is limited to a certain range, or
the first match in a line, or certain syntax groups, or a search that doesn't
open folds. This plugin offers generic functions that can be used to easily
build such custom search mappings for special searches. A predicate function
can specify which matches are skipped, and options control the behavior with
regards to folding and jumps.
- The SearchRepeat.vim (vimscript #4949) plugin provides an integration
facility for custom searches (such as ones implemented via
SearchSpecial.vim) that repeats the last type of used search via n/N, and
can list all defined custom searches.
The following custom searches use this plugin:
SearchForExpr: Search where pattern matches and a passed
expression evaluates to true.
This plugin defines several functions. The following is an overview; you'll
find the details directly in the implementation files in the .vim/autoload/
SearchSpecial#SearchWithout( searchPattern, isBackward, Predicate, predicateId, predicateDescription, count, ... )
The main helper function that jumps to the next match of a:searchPattern,
skipping all those matches where a:Predicate returns false.
Here's a simple search mapping that emulates the default search (because it
doesn't pass a predicate that limits the matches, nor are there any options):
nnoremap <silent> ,n
\ :<C-u>if SearchSpecial#SearchWithout(@/, 0, '', 'default', '', v:count1)<Bar>
\ if &hlsearch<Bar>set hlsearch<Bar>endif<Bar>
\ else<Bar>echoerr ingo#err#Get()<Bar>endif<CR>
The 'hlsearch' handling cannot be done in a function; and any "Pattern not
found" error is raised directly from the mapping; that's the boilerplate code
at the end of the mapping.
This script is packaged as a vimball. If you have the "gunzip" decompressor
in your PATH, simply edit the *.vmb.gz package in Vim; otherwise, decompress
the archive first, e.g. using WinZip. Inside Vim, install by sourcing the
vimball or via the :UseVimball command.
To uninstall, use the :RmVimball command.
- Requires Vim 7.0 or higher.
- Requires the ingo-library.vim plugin (vimscript #4433), version 1.019 or
Click on the package to download.
ip used for rating: 188.8.131.52