sponsor Vim development Vim logo Vim Book Ad

SearchSpecial : Generic functions for special search modes.

 script karma  Rating 0/0, Downloaded by 190    Comments, bugs, improvements  Vim wiki

created by
Ingo Karkat
script type
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.
install details
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.
    vim SearchSpecial*.vmb.gz
    :so %
To uninstall, use the :RmVimball command.

- Requires Vim 7.0 or higher.
- Requires the ingo-library.vim plugin (vimscript #4433), version 1.019 or

rate this script Life Changing Helpful Unfulfilling 
script versions (upload new version)

Click on the package to download.

package script version date Vim version user release notes
SearchSpecial-1.00.vmb.gz 1.00 2014-05-24 7.0 Ingo Karkat Initial upload
ip used for rating:

If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to the maillist. Help Bram help Uganda.
SourceForge.net Logo