sponsor Vim development Vim logo Vim Book Ad

TaggedSearchPattern : Attach names to search patterns for easier recall.

 script karma  Rating 7/6, Downloaded by 1356  Comments, bugs, improvements  Vim wiki

created by
Ingo Karkat
 
script type
utility
 
description
DESCRIPTION
You use text searches all the time in Vim. While it is simple to recall
previous patterns through the cmdline-history, quickly recognizing them can
be hard, especially if it's a long convoluted regular expression that you've
confidently built some hours ago, but now all variants stored in the history
look like nearly identical gibberish.

This plugin allows you to "tag" individual searches with a name, so that these
searches are documented and therefore become easier to recognize and recall.
You can also pre-seed your search history with frequently needed searches.

HOW IT WORKS
Tagged searches reside in the normal search history like all other searches.
The tagging works by prepending a special regular expression branch that never
matches any text.

RELATED WORKS
Inspired by
http://stackoverflow.com/questions/10174171/indicator-to-see-from-which-function-a-search-string-comes/

An alternative is to append a literal NUL character (^@, enter via <C-V><C-@>)
after the concluded search pattern, e.g.
    /foobar/^@tag here
Vim will ignore everything after the NUL byte, but it'll still show the whole
line in the search history, including the tag. (Discovered by glts in
http://stackoverflow.com/a/20020360/813602) This depends on an implementation
detail, and the tag position makes it more difficult to search / recall.

USAGE
Inside the search command-lines (:/, :?), tag (and un-tag) the current
search with CTRL-T, type the tag name, and store and activate the search with
<Enter> as usual.
Since tagged searches start with the tag, recall is as simple as entering the
search command-line via :/, typing the first letters of the tag and pressing
c_<Up> (repeatedly if there are many).
When you're in the cmdline-window via q/, just search for tags via
/^{tag-name}. Or open a filtered view of the search cmdline-window through
q_CTRL-T.

CTRL-T                  Prepend the search-neutral tag expression and position
                        the cursor before it at the beginning of the
                        command-line, so that the tag can be entered.
                        For the tag, stick to alphanumeric characters
                        (whitespace is okay, too). Do not use characters like
                        \, &, |, etc. that have a special meaning in a regexp!

                        When the current search already has been tagged:
                        Remove the tag and the following search-neutral tag
                        expression.
                        You can use CTRL-T CTRL-T to rename a tagged search
                        pattern.

CTRL-G CTRL-T           Like c_CTRL-T, but ensure that the search tag will
                        be unique in the search history (by removing any
                        previous searches with the same tag)
                        g:TaggedSearchPattern_UniqueTagPattern

q CTRL-T                Open the search command-line window as with q/ and
                        list only tagged searches. The tag names are
                        highlighted for easier recognition. As usual, <Enter>
                        uses the current search pattern under the cursor, or
                        press CTRL-C to continue editing in Command-line mode.

If you don't use them, tagged searches will eventually be expelled from the
search history, just like any other search pattern. You can delay this by
increasing the 'history' setting and the "/" value of 'viminfo'.
Alternatively, you can automatically define often-used tagged searches
(globally in .vimrc, or maybe only when certain filetypes are loaded via a
ftplugin), like this:
    call TaggedSearchPattern#HistAdd('mytag', '\<search\d\+\|pattern\>')
    call TaggedSearchPattern#HistAdd('unique', '\<pattern\>', 1)
 
install details
INSTALLATION
The code is hosted in a Git repo at
    https://github.com/inkarkat/vim-TaggedSearchPattern
You can use your favorite plugin manager, or "git clone" into a directory used
for Vim packages. Releases are on the "stable" branch, the latest unstable
development snapshot on "master".

This script is also 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 TaggedSearchPattern*.vmb.gz
    :so %
To uninstall, use the :RmVimball command.

DEPENDENCIES
- Requires Vim 7.0 or higher.

CONFIGURATION
For a permanent configuration, put the following commands into your vimrc:

For certain tag names, you can ensure that each tagged search pattern only
exists once in the search history (previous patterns with the same tag are
deleted). By default, any tag name ending with a "!" is a unique one:
    let g:TaggedSearchPattern_UniqueTagPattern = '.!$'
To make all tag searches unique, use this:
    let g:TaggedSearchPattern_UniqueTagPattern = '.'

To turn off the highlighting of the tag name and search-neutral tag expression
in the search cmdline-window:
    let g:TaggedSearchPattern_HighlightTags = 0

To change the highlighting colors, redefine (after any :colorscheme command)
or link the two highlight groups:
    highlight link TaggedSearchTag Search
    highlight TaggedSearchNeutral ctermfg=Black guifg=White

If you want to use different mappings, map your keys to the
<Plug>(TaggedSearchPattern...) mapping targets _before_ sourcing the script
(e.g. in your vimrc):
    cmap <C-t> <Plug>(TaggedSearchPatternToggle)
    cmap <C-g><C-t> <Plug>(TaggedSearchPatternUniqueToggle)
    nmap q<C-t> <Plug>(TaggedSearchPatternList)
 

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
TaggedSearchPattern-1.10.vmb.gz 1.10 2018-11-18 7.0 Ingo Karkat - Make <C-t> mapping configurable.
- ENH: Allow unique tags, identified via g:TaggedSearchPattern_UniqueTagPattern or forced via different mapping.
- Add <C-g><C-t> variant that enforces unique tag.
- Minor: Remove q<C-t> filter pattern from search history.
TaggedSearchPattern.vba.gz 1.00 2012-07-09 7.0 Ingo Karkat Initial upload
ip used for rating: 142.132.191.50

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.
   
Vim at Github