¿Cómo buscar el texto seleccionado en Vim?


61

Soy consciente de que puedo usar /seguido de una expresión regular para buscar algo. Y puedo usar ?para buscar hacia atrás. Y puedo usar ny Npara repetir la búsqueda hacia adelante y hacia atrás.

También hay dos atajos agradables: *o #buscará la palabra debajo del cursor (adelante / atrás). Eso es muy útil! (también hay g*y g#variantes)

Pero ... Una vez que he seleccionado el texto usando el modo visual ( v), ¿cómo puedo pedirle a Vim que busque exactamente ese texto? Un vistazo rápido a :help... no me ayudó.



Gracias por los consejos con *y #! Sería bueno si su pregunta también explicara qué g*y g#haría;)
— winklerrr

Respuestas:


22

La siguiente secuencia hará lo que desee, dado un bloque de texto ya seleccionado:

  • y(arrastra el texto seleccionado al "registro de forma predeterminada)
  • / (ingrese al modo de búsqueda)
  • ( \ V) (opcional, ingrese al modo "muy sin magia" *)
  • Ctrl+ r "(insertar texto desde el "registro)
  • Enter (¡Contratar!)

(*) el modo "muy poco mágico" interpreta el siguiente texto como texto sin formato en lugar de una expresión regular. Sin embargo tenga en cuenta que \y /siguen siendo especial y tendrá que ser manejado de otra manera. Si el texto no tiene ningún carácter que se considere especial, puede omitir este paso.

Fuente: Vim Tips Wiki


1
¡Gracias! Esto es mucho más comprensible que el "How-To" en la vim.wikia página
— winklerrr

64

Puede tirar del texto resaltado primero. Luego

  • /

  • Ctrlr

  • "

Que pegará lo que ha tirado después de /.


77
Buena idea ... excepto que el texto pegado se interpretará como una expresión regular, lo cual no es deseable. :-(
— Denilson Sá Maia

44
Si esto es lo suficientemente bueno para ti, entonces podrías hacerlo /\V<C-r>". Al anteponer \Vsu consulta de búsqueda, le dice a vim que use "muy poco mágico". Las barras invertidas aún pueden causarle problemas. Ver:help \V
— idbrii

3
Puede ser útil explicar que así Ctrl+Res como se accede a un registro, y *es simplemente el registro del portapapeles del sistema. Por ejemplo, también puede hacer: yawtirar de una palabra al registro "(el registro predeterminado), luego /<C-r>"buscar esa cadena.
— Ben Davis

55
@ DenilsonSá: puede usar esta solución, pero en lugar de usar /para hacer su búsqueda, use ?en su lugar, ya que las búsquedas inversas escapan de forma predeterminada. Luego puede presionar Npara continuar su búsqueda en la dirección hacia adelante.
— Brad Parks,

7

Nunca sentí la necesidad de tal característica pero, considerando que puedes encontrar la necesidad de cualquier característica en Vim, creo que eso debería ayudar:

Buscar texto seleccionado visualmente

No lo probé pero, mirando el código, parece ser exactamente lo que estás buscando.


4

Puede encontrar un método para crear este comportamiento aquí en la wiki de vim .


Agradable, encontré que la versión para escapar de las barras es útil. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
— artesanía

1

Esta solución potencia su búsqueda vim en contexto seleccionado visualmente incluso con caracteres multilínea y de escape.

Agregue el siguiente código en usted .vimrcy busque el contenido visualmente seleccionado por //. También puede sustituir globalmente el contenido seleccionado por /s. O Sustituya localmente el contexto seleccionado por //primero, y luego seleccione visualmente una región y :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

La configuración anterior solo se trata de buscar. Para toda mi configuración de vim, visite .vimrc


0

En mis configuraciones en dos máquinas separadas, si selecciono el texto y luego /lo presiono, busca automáticamente el texto seleccionado.


Ese no es el comportamiento predeterminado. Aquí, cuando presiono / (mientras estoy en modo visual), solo muestra un mensaje de expresiones regulares vacío, esperando que escriba algo.
— Denilson Sá Maia

Extraño, porque nunca hice nada para habilitarlo.
— Nathan Fellman

3
Muchas distribuciones envían una configuración vim no estándar como predeterminada (probablemente porque la configuración vim estándar deshabilita muchas características útiles, principalmente por compatibilidad vi).
— sleske
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.