sponsor Vim development Vim logo Vim Book Ad

PatternComplete : Insert mode completion for matches of queried / last search pattern.

 script karma  Rating 9/3, Downloaded by 2427  Comments, bugs, improvements  Vim wiki

created by
Ingo Karkat
 
script type
utility
 
description
DESCRIPTION
This plugin offers completions that either use the last search pattern or
query for a regular expression, and then offer all matches for completion.

Without this plugin, you can just directly insert the contents of the last
search pattern register via CTRL-R /, but the register can contain \<word\>
boundary characters from a star search or other non-literal regexp atoms
like \V, .*, etc., which you usually don't want inserted into the text.

SEE ALSO
- Check out the CompleteHelper.vim plugin page (vimscript #3914) for a full
  list of insert mode completions powered by it.

USAGE
CTRL-X /                Use a "/"-delimited (g:PatternComplete_DelimitersPattern)
                        /{pattern}/ base before the cursor, or (if no such
                        base) the WORD before the cursor and allow further
                        refinement (press <Enter> to accept, <C-U> to discard
                        and enter something else, or just edit the preset), or
                        (if only whitespace before cursor) first query for
                        {pattern} (press <Enter> to conclude), and find
                        matches for {pattern}.
{Visual}CTRL-X /        The completion finds matches for the selected pattern.

CTRL-X *                Like above, but find matches for whole \<{pattern}\>,
                        or {pattern} surrounded by whitespace as a fallback.

{Visual}CTRL-X *        Find whole word (or whole WORD as a fallback) matches
                        for the selected pattern.

CTRL-X &                Find matches for the last search pattern, quote/.

CTRL-R &                Insert first match for the last search pattern
                        quote/ into the command-line.

CTRL-X ?                Find matches, reusing the {pattern} from the last
                        pattern completion.

CTRL-X g/               Like above, but instead of offering matches as
{Visual}CTRL-X g/       completion candidates, find common substrings and turn
CTRL-X g*               all matches into a Bash-like Brace Expression.
{Visual}CTRL-X g*       For example, /\<f\w\+\>/ yields foobar, fooxy and foon.
CTRL-X g&               Those will be inserted as foo{bar,xy,n}.
CTRL-X g?
 
install details
INSTALLATION
The code is hosted in a Git repo at
    https://github.com/inkarkat/vim-PatternComplete
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 PatternComplete*.vmb.gz
    :so %
To uninstall, use the :RmVimball command.

DEPENDENCIES
- Requires Vim 7.0 or higher.
- Requires the ingo-library.vim plugin (vimscript #4433), version 1.033 or
  higher.
- Requires the CompleteHelper.vim plugin (vimscript #3914), version 1.50 or
  higher.

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

By default, the 'complete' option controls which buffers will be scanned for
completion candidates. You can override that either for the entire plugin, or
only for particular buffers; see CompleteHelper_complete for supported
values.
    let g:PatternComplete_complete = '.,w,b,u'

The possible regular expression delimiters for a /{pattern}/ base before the
cursor (for i_CTRL-X_/ and i_CTRL-X_star) can be configured as a pattern:
    let g:PatternComplete_DelimitersPattern = '[/?#@]'
Set to an empty string to disable the special parsing of delimited {patterns}.

The Brace Expression can be created according to strict rules that allow a
expansion into the original matches:
    let g:PatternComplete_AsBraceOptions = {'strict': 1}
By default, a different algorithm is chosen that trades full equivalence
(between expression and substrings) for a shorter syntax that is better to
understand:
    let g:PatternComplete_AsBraceOptions = {'short': 1}

If you want to use different mappings, map your keys to the
<Plug>(PatternComplete) mapping targets _before_ sourcing the script (e.g.
in your vimrc):
    imap <C-x>/ <Plug>(PatternCompleteInput)
    imap <C-x>* <Plug>(PatternCompleteWordInput)
    vmap <C-x>/ <Plug>(PatternCompleteInput)
    vmap <C-x>* <Plug>(PatternCompleteWordInput)
    imap <C-x>& <Plug>(PatternCompleteSearch)
    cmap <C-r>& <Plug>(PatternCompleteSearchMatch)
    imap <C-x>? <Plug>(PatternCompleteLast)

If you don't want the mappings that return all matches as a single Bash-like
Brace Expression, you can disable them all at once via:
    let g:PatternComplete_EnableBraceMappings = 0
Alternatively, you can tweak or disable them all individually, too:
    imap <C-x>g/ <Plug>(PatternCompleteInputAsBrace)
    imap <C-x>g* <Plug>(PatternCompleteWordInputAsBrace)
    vmap <C-x>g/ <Plug>(PatternCompleteInputAsBrace)
    vmap <C-x>g* <Plug>(PatternCompleteWordInputAsBrace)
    imap <C-x>g& <Plug>(PatternCompleteSearchAsBrace)
    imap <C-x>g? <Plug>(PatternCompleteLastAsBrace)
 

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
PatternComplete-1.20.vmb.gz 1.20 2024-11-12 7.0 Ingo Karkat - ENH: Add <C-x> g ... mappings to insert all pattern matches joined into a Bash-like Brace Expression.
- CHG: <C-x>/ and <C-x>* insert mode mappings now grab the WORD before the cursor as a preset for editing (unless a separated /{pattern}/ is found). Using other completions to build the pattern is a common use case, the delimiters are often forgotten, selection is cumbersome and slow, and often there's a natural whitespace boundary, anyway. *** You need to update to ingo-library (vimscript #4433) version 1.033! ***
PatternComplete-1.10.vmb.gz 1.10 2017-09-16 7.0 Ingo Karkat - ENH: Add <C-x>? mapping to reuse last search pattern.
- ENH: Also support visual mode variants for <C-x>/ and <C-x>*.
- ENH: Also handle /{pattern}/ base before cursor; this is often quicker and more comfortable to enter (using register contents, other completions, etc.) than the explicit user query that has been the only possibility so far.
PatternComplete-1.02.vmb.gz 1.02 2016-04-28 7.0 Ingo Karkat - Use a:options.abbreviate instead of explicit abbreviation loop. *** You need to update to CompleteHelper.vim (vimscript #3914) version 1.50! ***
- Remove default g:PatternComplete_complete configuration and default to 'complete' option value instead.
- Use more functions from the ingo-library. *** You need to update to ingo-library (vimscript #4433) version 1.011! ***
PatternComplete-1.01.vmb.gz 1.01 2013-07-15 7.0 Ingo Karkat - DWIM: Remove the \<...\> enclosure when the last used search pattern is a whole word search (that just has no matches now).
- Add dependency to ingo-library (vimscript #4433).
PatternComplete-1.00.vmb.gz 1.00 2012-10-01 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