¿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.