nnoremap z* :set opfunc=SearchForwardg@ vnoremap z* :call SearchForward(visualmode(), 1) nnoremap z# :set opfunc=SearchBackwardg@ vnoremap z# :call SearchBackward(visualmode(), 1) function! Search(type, ...) let user_unnamed_register = @@ if a:0 silent execute "normal! gvy" elseif a:type == 'line' silent execute "normal! '[V']y" else silent execute "normal! `[v`]y" endif let @/ = substitute(escape(@@, '\'), '\n', '\\n', 'g') call histadd('/', @/) let @@ = user_unnamed_register endfunction function! SearchForward(type, ...) call call('Search', [a:type] + a:000) call feedkeys('n', 't') endfunction function! SearchBackward(type, ...) call call('Search', [a:type] + a:000) call feedkeys('N', 't') endfunction