results buscar and search vim

search - buscar - ViM: busca y resalta pero no saltas



vim search and replace (7)

Encontré que esto funciona bastante bien, no hay parpadeo y no necesita un registro intermedio.

nnoremap <silent> * :let @/= ''/<'' . expand(''<cword>'') . ''/>'' <bar> set hls <cr>

O si quieres el comportamiento g* :

nnoremap <silent> g* :let @/=expand(''<cword>'') <bar> set hls <cr>

La tecla superstar (*) en ViM buscará la palabra debajo del cursor y saltará hacia la siguiente coincidencia. El usuario puede saltar a las siguientes coincidencias con la tecla n . Si hlsearch está habilitado, también resaltará las coincidencias.

Quiero poder presionar * y obtener las coincidencias resaltadas y ser capaz de navegar por las coincidencias con la tecla n. Sin embargo, no quiero que ViM salte a la siguiente coincidencia cuando se presiona *, debería permanecer en la palabra actual. ¿Hay alguna forma de hacer esto?


La mejor solucion:

  1. no agregue un salto a la lista de saltos
  2. el comportamiento de la tecla de estrella no se cambia

así que prueba el complemento: http://www.vim.org/scripts/script.php?script_id=4335

Mucho mejor que:

" a jump adds to the jump list nnoremap * *`` " I got a dead loop on macvim nnoremap * :keepjumps normal *``<cr> " the behavior is changed nnoremap <silent> <Leader>* :let @/=''/<<C-R>=expand("<cword>")<CR>/>''<CR>:set hls<CR>


No he visto este todavía:

nmap <silent> * "syiw<Esc>: let @/ = @s<CR>

Es muy corto y no implica saltar, lo que puede provocar un parpadeo.

Explicación: copie la palabra debajo del cursor para registrar y luego ajuste el registro de búsqueda ( / ) al contenido del registro s . El registro de búsqueda no se puede escribir directamente, es por eso que el let es necesario y de ahí el silent para mantener limpia la línea de comando de vim.


Si desea mantener la vista actual y agregar la búsqueda al historial, intente con esta solución [no tan eficiente]:

noremap * msHmt`s*`tzt`s

Está utilizando las marcas s (guardar) y t (arriba).


Tengo lo siguiente en mi .vimrc, que creo que funciona mejor que las otras alternativas:

" Put word under cursor into search register and highlight nnoremap <silent> <Leader>* :let @/=''/<<C-R>=expand("<cword>")<CR>/>''<CR>:set hls<CR> vnoremap <silent> <Leader>* :<C-U> /let old_reg=getreg(''"'')<Bar>let old_regtype=getregtype(''"'')<CR> /gvy:let @/=substitute( /escape(@", ''//.*$^~[''), ''/_s/+'', ''//_s//+'', ''g'')<CR> /gV:call setreg(''"'', old_reg, old_regtype)<CR>:set hls<CR>


Una solución simple vino a mi mente: poner el map * *# en el archivo .vimrc (sin embargo, parpadeará).


Yo mapearía:

nnoremap * *``

Funciona exactamente como usted quiere, excepto que agrega un salto en la lista de salto. Para evitar eso necesitas:

nnoremap * :keepjumps normal *``<cr>