Enhanced hlsearch in Vim
2014-10-07 14:15
A while back I watched the talk More Instantly Better Vim by Damian Conway from OSCON 2013.
There were a lot of interesting Vim stuff in that talk and the talk it self was entertaining (go watch it).
One of the things I took away from the talk was enhanced hlsearch. When there's a lot of matches it can be kind of hard to see what occurence you just jumped to. This snippet makes the current match flash for a brief period of time.
Unfortunately there's a drawback from using it since the implementations involves the use of sleep. It's not optimal but when fine tuned to serve its purpose without being annoying I found it quite useful.
Put the following snippet into your .vimrc and give it a spin.
" Highlight search matches and next
set hlsearch
" create a HLNext (from http://www.youtube.com/watch?v=aHm36-na4-4)
nnoremap <silent> n n:call HLNext(0.2)<cr>
nnoremap <silent> N N:call HLNext(0.2)<cr>
highlight WhiteOnRed ctermbg=white guibg=red
function! HLNext (blinktime)
let [bufnum, lnum, col, off] = getpos('.')
let matchlen = strlen(matchstr(strpart(getline('.'),col-1),@/))
let target_pat = '\c\%#'.@/
let blinks = 3
for n in range(1,blinks)
let red = matchadd('WhiteOnRed', target_pat, 101)
redraw
exec 'sleep ' . float2nr(a:blinktime / (2*blinks) * 1000) . 'm'
call matchdelete(red)
redraw
exec 'sleep ' . float2nr(a:blinktime / (2*blinks) * 1000) . 'm'
endfor
endfunction