Vim - select text highlighted by search?

14,143

Solution 1

You can use gn in version 7.4 onwards (and gN to go backwards). It replaces the v//e trick.

Search forward for the last used search pattern, like with `n`, and start Visual mode to select the match.

See :help gn or this Vimcast for more information.

Solution 2

Try this:

/an arrow
v//e

It goes into visual mode, repeats the last search and selects until the end.

Solution 3

I found that v//e by itself is insufficient because after you exit visual mode, jumping to the next/previous search result puts the cursor at the end of the result, instead of at its beginning as you would normally expect.

To fix this, we should first jump to the end of the search result (//e) and then visually select to its beginning (v??):

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

Cheers.

Solution 4

There is now a Vim-Search-Objects plugin that makes Vim treat search matches as regular text objects, so you can simply va/ (visual-select a match) after you perform a search.

Solution 5

A "dumbber" way to do it is to map a key (in this case F5) like below:

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

After /an arrow hit F5.

Share:
14,143

Related videos on Youtube

Nathan Long
Author by

Nathan Long

I code mostly in Ruby and Elixir. More about me at nathanmlong.com and Stackoverflow Careers.

Updated on September 17, 2022

Comments

  • Nathan Long
    Nathan Long over 1 year

    In vim, I often perform searches to hop to a word or phrase instead of navigating there with h/j/k/l. Then I hit n to hop between occurrences.

    Say I've got this text:

    Time flies like an arrow; fruit flies like a banana. - Groucho Marx
    

    I type /an arrow and hit enter. That phrase is highlighted, and I jump to it with n.

    Now I want to visually select that text, maybe to change it or delete it. (Yes, I'm aware of the :s substitution command.)

    Since my cursor is at the letter "a" at the beginning of "an arrow," I can hit v, then press e a couple of times to highlight the entire phrase. But I have a feeling there's a shorter and more semantic way. After all, I've already specified the text I'm interested in.

    How might I compose a command to say "visually select the current search selection?"

  • Dennis Williamson
    Dennis Williamson over 13 years
    That selects one more character because of the +1. Omit that and it will select only the part that was searched for. On the other hand, nnoremap <F5> v//e<CR> seems to work just fine.
  • Johnny
    Johnny over 13 years
    @Dennis Williamson,+1 is necessary to select exactly what was searched, if you remove +1 the last character will not be selected because it doesn't selects the character where the cursor is. Any way nnoremap <F5> v//e<CR> is much better.
  • Dennis Williamson
    Dennis Williamson over 13 years
    It does select the character for me. If I press x or c after doing your F5 but without the +1 the whole search string, including the character under the cursor, is deleted.
  • Johnny
    Johnny over 13 years
    @Dennis Williamson, I just learned that my 'selection' option is set to "exclusive", but the default value is "inclusive". That's why it worked for you without +1. (See :help selection )
  • Kyle Strand
    Kyle Strand almost 10 years
    For symmetry: nnoremap g? ??b<cr>v//e<cr> (does the same thing but searching backwards instead of forwards)
  • smathy
    smathy over 9 years
    From Vim 7.4 on gn does this too (without changing what n means)
  • bwDraco
    bwDraco over 9 years
    This duplicates a comment to another answer and is not very useful as it stands. It might be a good idea if you quoted the documentation so that your answer can stand on its own.
  • David Lord
    David Lord over 9 years
    Happy to make the answer better but I'm not sure whether that would help. The question lays out the objective neatly ("visually select the next search result") and gn does exactly as asked. Submitting it as a separate answer emphasises that it's a complete substitute for v//e. I just edited my answer to add documentation, is that better?
  • Nathan Long
    Nathan Long over 9 years
    Fantastic! Thanks for updating this thread with the latest and greatest. :)