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é n
para saltar entre los sucesos.
Digamos que tengo este texto:
Time flies like an arrow; fruit flies like a banana. - Groucho Marx
Escribo /an arrow
y 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 :s
comando de sustitución).
Como mi cursor está en la letra "a" al comienzo de "una flecha", puedo presionar v
y luego presionar e
un 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?"
gn
hace exactamente lo que se le pidió. Enviarlo como una respuesta separada enfatiza que es un sustituto completo dev//e
. Acabo de editar mi respuesta para agregar documentación, ¿es eso mejor?Prueba esto:
Entra en modo visual, repite la última búsqueda y selecciona hasta el final.
fuente
gn
también lo hace (sin cambiar lo quen
significa)Descubrí que
v//e
por 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??
):Salud.
fuente
nnoremap g? ??b<cr>v//e<cr>
(hace lo mismo pero busca hacia atrás en lugar de hacia adelante)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.fuente
Una forma "tonta" de hacerlo es mapear una clave (en este caso F5) como a continuación:
Después de
/an arrow
golpear F5.fuente
+1
. Omita eso y seleccionará solo la parte que se buscó. Por otro lado,nnoremap <F5> v//e<CR>
parece funcionar bien.x
oc
después de hacer suF5
pero sin la+1
cadena de búsqueda completa, incluido el carácter debajo del cursor, se elimina.