One feature of Notepad++, which I find really useful and haven't found elsewhere, is the highlighting of other text that is identical to the one currently selected.

Is there something similar possible with vi(m)? (Of course, there is. But how do I achieve it?) That is, any of those:

  • If I am in Visual Mode and have text selected: Highlight identical text

  • If I have searched /foo, highlight all instances of foo.

  • If I am at the beginning of a string (series of characters, numbers or underscores), highlight all other matching strings (prefered solution).

The last one is similar to the closing parentheses matching and IMHO the most useful.

Edit: For my second use case, I found a solution (that is, Google found it...):

:set hls

However, the others remain.

link|improve this question

feedback

3 Answers

up vote 2 down vote accepted

For your third requirement,

nnoremap , :mat Error "<C-R><C-W>"<CR>
Put this in your vimrc file..
Press comma to highlight all occurrences of the word at cursor.
Also, pressing * or # will highlight all occurrences of the string at cursor when hlsearch is set
edit:
For your first requirement,
vnoremap <silent> , :<C-U>
  \let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR>
  \gvy:mat Error "<C-R><C-R>=substitute(
  \escape(@", '/".*$^~['), '_s+', '\_s\+', 'g')<CR>"<CR>
  \gV:call setreg('"', old_reg, old_regtype)<CR>
Found this here. Modified to your needs.

link|improve this answer
Cool, that quite did it. Haven't known the # trick before. (However, how do I cancel again the search highlighting?) – Boldewyn Apr 2 '10 at 9:37
just type in command ':noh' – asdfg Apr 2 '10 at 10:07
feedback
:help hlsearch

 When there is a previous search pattern, highlight all its matches.

so, put

set hlsearch

to your vimrc

link|improve this answer
...I really get distracted by all those unicorns! Where did Jeff Atwood get all those dozens (hundreds, thousands?) of different images from? Anyway, thanks for the answer. Seems like I found this one while you typed. – Boldewyn Apr 1 '10 at 12:13
@Boldewyn, meta.stackoverflow.com/questions/44894/… – GmonC Apr 1 '10 at 15:17
feedback

For door number three, that is what the # key does. It will also jump to the beginning of the previous string of such. Asterisk(*) does the opposite: jump to the beginning of the next string of such.

link|improve this answer
Thanks! The asterisk is, too, new for me. – Boldewyn Apr 2 '10 at 9:37
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.