tutorial how commands and vim editor vi

how - vim commands



Vim: entrar al registro de búsqueda (5)

Buscando una selección:

si primero quieres marcar una sección de una línea, utiliza "v" y mueve los cursores hasta que hayas marcado lo que deseas, luego presiona y para yank y ahora la selección está en el registro 0

puede escribir /Ctrl-R 0

¿Hay alguna manera fácil / rápida de "arrastrar" en el registro de "última búsqueda" de vim ("/)?

De la documentación de vim, parece que la respuesta es no, pero que se puede asignar mediante un comando "let":

It is writable with ":let", you can change it to have ''hlsearch'' highlight other matches without actually searching. You can''t yank or delete into this register.

Idealmente, lo que me gustaría hacer es algo así como:

"/5yw

que tiraría las siguientes 5 palabras debajo del cursor y las pondría en el último búfer de búsqueda

Alternativamente, si hay una manera de buscar los contenidos de un registro nombrado, eso también funcionaría. En otras palabras, si pudiera:

"A5yw

y luego busca lo que está en el registro A, eso también funcionaría.

Lo más cerca que puedo llegar es entrar en un registro con nombre y luego copiar ese registro en el último registro de búsqueda, por ejemplo

"A5yw :let @/=@A

A riesgo de hacer una pregunta larga por más tiempo, quiero decir que no siempre son 5 palabras que me gustaría "tirar y buscar"; a veces son 17 caracteres, a veces hasta el final de la línea, etc. así que una macro codificada no me da la flexibilidad que quisiera.


Después de presionar / para ingresar una cadena de búsqueda, puede usar Ctrl-R y luego escribir la letra que representa el registro que desea usar.

p.ej.

  • Primero, "Ayw para "Ayw una palabra en el registro A
  • Luego, / ^RA para poner el contenido del registro A en la cadena de búsqueda.

Entonces, básicamente, una versión extendida de los comandos # y *, ¿verdad? Parece que quieres definir un operador personalizado (un comando que espera un movimiento). Nunca he hecho esto, pero encontré un plugin que parece que podría facilitarlo. Hay algunos ejemplos proporcionados.


Estoy usando el siguiente código para eso:

vnoremap <silent>* <ESC>:call VisualSearch(''/'')<CR>/<CR> vnoremap <silent># <ESC>:call VisualSearch(''?'')<CR>?<CR> function! VisualSearch(dirrection) let l:register=@@ normal! gvy let l:search=escape(@@, ''$.*//[]'') if a:dirrection==''/'' execute ''normal! /''.l:search else execute ''normal! ?''.l:search endif let @/=l:search normal! gV let @@=l:register endfunction


Si no usó ningún registro para almacenar el texto arrancado, vim usa 0 registro. Puede buscarlo escribiendo Ctrl-R 0 después de / .

Un ejemplo más complicado. Digamos que desea buscar en otro búfer para el texto dentro de comillas que está debajo del cursor en este momento:

  • Puedes hacer eso con yi" (yank inner quote)
  • Ve al buffer donde quieres buscar
  • Tipo /Ctrl-R 0