Vim: ¿seleccionar texto resaltado por búsqueda?

53

En vim, a menudo realizo búsquedas para saltar a una palabra o frase en lugar de navegar allí h/j/k/l. Luego golpeé npara saltar entre los sucesos.

Digamos que tengo este texto:

Time flies like an arrow; fruit flies like a banana. - Groucho Marx

Escribo /an arrowy presiono enter. Esa frase está resaltada, y salto con ella n.

Ahora quiero seleccionar visualmente ese texto , tal vez para cambiarlo o eliminarlo. (Sí, conozco el :scomando de sustitución).

Como mi cursor está en la letra "a" al comienzo de "una flecha", puedo presionar vy luego presionar eun par de veces para resaltar la frase completa. Pero tengo la sensación de que hay una forma más corta y semántica. Después de todo, ya he especificado el texto que me interesa.

¿Cómo podría redactar un comando para decir "seleccionar visualmente la selección de búsqueda actual?"

Nathan Long
fuente

Respuestas:

38

Puede usar gnen la versión 7.4 en adelante (y gNpara ir hacia atrás). Reemplaza el v//etruco.

Busque hacia adelante el último patrón de búsqueda utilizado, como con `n`, e inicie el modo Visual para seleccionar la coincidencia.

Vea :help gno este Vimcast para más información.

David Lord
fuente
Esto duplica un comentario a otra respuesta y no es muy útil como está. Podría ser una buena idea si citara la documentación para que su respuesta pueda ser independiente.
bwDraco
2
Feliz de mejorar la respuesta, pero no estoy seguro de si eso ayudaría. La pregunta establece claramente el objetivo ("seleccionar visualmente el siguiente resultado de búsqueda") y gnhace exactamente lo que se le pidió. Enviarlo como una respuesta separada enfatiza que es un sustituto completo de v//e. Acabo de editar mi respuesta para agregar documentación, ¿es eso mejor?
David Lord
Eso está bien, gracias. Si necesita ayuda, asegúrese de visitar el recorrido y el centro de ayuda . Bienvenido a Super User, y esperamos que disfrute su estadía.
bwDraco
1
¡Fantástico! Gracias por actualizar este hilo con lo último y lo mejor. :)
Nathan Long
29

Prueba esto:

/an arrow
v//e

Entra en modo visual, repite la última búsqueda y selecciona hasta el final.

Dennis Williamson
fuente
1
Desde Vim 7.4 en adelante gntambién lo hace (sin cambiar lo que nsignifica)
2014
8

Descubrí que v//epor sí solo es insuficiente porque después de salir del modo visual, saltar al resultado de búsqueda siguiente / anterior coloca el cursor al final del resultado, en lugar de al principio, como normalmente esperaría.

Para solucionar esto, primero debemos saltar al final del resultado de búsqueda ( //e) y luego seleccionar visualmente su comienzo ( v??):

" visually select a search result
nnoremap g/ //e<Enter>v??<Enter>

Salud.

sunaku
fuente
Para simetría: nnoremap g? ??b<cr>v//e<cr>(hace lo mismo pero busca hacia atrás en lugar de hacia adelante)
Kyle Strand
2

Ahora hay un complemento Vim-Search-Objects que hace que Vim trate las coincidencias de búsqueda como objetos de texto normales, para que pueda simplemente va/(seleccionar visualmente una coincidencia) después de realizar una búsqueda.

sunaku
fuente
1

Una forma "tonta" de hacerlo es mapear una clave (en este caso F5) como a continuación:

nnoremap <F5> v/<c-r>=strpart(@/,1) . '/e+1'<CR><CR>

Después de /an arrowgolpear F5.

Johnny
fuente
Eso selecciona un personaje más debido a la +1. Omita eso y seleccionará solo la parte que se buscó. Por otro lado, nnoremap <F5> v//e<CR>parece funcionar bien.
Dennis Williamson
@Dennis Williamson, + 1 es necesario para seleccionar exactamente lo que se buscó, si elimina +1 el último carácter no se seleccionará porque no selecciona el carácter donde está el cursor. De cualquier forma, nnoremap <F5> v // e <CR> es mucho mejor.
Johnny
Sí selecciona el personaje para mí. Si presiono xo cdespués de hacer su F5pero sin la +1cadena de búsqueda completa, incluido el carácter debajo del cursor, se elimina.
Dennis Williamson
@Dennis Williamson, acabo de enterarme de que mi opción 'selección' está configurada como "exclusiva", pero el valor predeterminado es "inclusivo". Es por eso que funcionó para ti sin +1. (Ver: selección de ayuda)
Johnny