2011-05-10 26 views
21

En vim/gvim me gustaría poder moverme al principio y al final de la búsqueda actual. es posible?Mover al inicio y al final de la búsqueda

Por ejemplo, con este archivo:

A dog and a cat 
A hat and a bat 

Me gustaría ser capaz de realizar una búsqueda, por ejemplo /dog\sand y luego ser capaz de moverse desde el principio del 'perro y' expresión a la final y posterior para que mi cursor comience en la columna 3, debajo de la letra 'd' de la palabra 'perro' y luego pase a la columna 9 debajo de la letra 'd' o la palabra 'y'.

La razón por la que deseo poder hacer esto es para poder buscar una expresión y luego usar el comando de cambio, c, combinado con un comando de movimiento para reemplazar esa expresión de búsqueda en particular. No quiero usar el sustituto y reemplazarlo aquí, quiero realizar esta operación usando el comando de cambio y una tecla de movimiento.

Respuesta

16

Puede cambiar al final del partido con c//e<CR>. Y //<CR> lo llevará al comienzo del próximo partido. Probablemente puedas encontrar algún tipo de enlaces para aquellos que tengan sentido. Por ejemplo he intentado lo siguiente y parece que funciona muy bien:

:onoremap <silent>m //e<CR> 

Así que se puede decir cm partido con el cambio. Aunque no estoy seguro de a qué me gustaría asignar //<CR>. Traté de mapearlo a n, y parecía funcionar bien. No sé si eso sería un problema para ti.

:nnoremap <silent>n //<CR> 
+0

Esto es un poco asqueroso porque sobrescribe el comportamiento de Vim predeterminado con un comportamiento menos útil; por ejemplo, no podrías hacer '[count] n'. –

+0

De acuerdo. El comando 'gn' mencionado en otra respuesta es mucho mejor, pero no creo que existiera en mayo de 2011. –

+2

A medida que surgen nuevas soluciones, la solución correcta puede cambiar. = P –

12

THS Proveedores:

/pattern<cr> to place the cursor at the start of search pattern 
/pattern/e<cr> to place the cursor at the end of search pattern 
+0

¿Cómo usaría esto como un comando de movimiento? Veo cómo esto me permite buscar hasta el final de una expresión, pero no es un comando de movimiento. –

+0

Perdón por la confusión con la palabra 'mover' aquí. '/ pattern ' colocará el cursor en el ** inicio ** del patrón de búsqueda. Y '/ pattern/e ' colocará el cursor en el ** final ** del patrón de búsqueda. – anubhava

+0

Correcto, pero ¿cómo se puede usar esto como comando de movimiento? Por favor mira mi pregunta original. No puedo usar tu respuesta con el comando de cambio, por ejemplo. –

-2

Puesto que usted sabe cuántas palabras que está buscando, por qué no sólo se mueven allí y luego de nuevo utilizando los comandos de movimiento de palabras? Es decir, "2w" para ir al final del resultado de búsqueda actual, y "2b" para volver atrás.

+2

Lo hago en el ejemplo trivial, pero en casos más complejos no es tan fácil. ¿Qué sucede si la expresión de búsqueda incluye signos de puntuación y números? –

32

Usted está buscando cgn. De :help gn:

Search forward for the last used search pattern, like 
with `n`, and start Visual mode to select the match. 
If the cursor is on the match, visually selects it. 
If an operator is pending, operates on the match. 
E.g., "dgn" deletes the text of the next match. 
If Visual mode is active, extends the selection 
until the end of the next match. 

La belleza de esto es que puede hacer cgn y luego repetir el comando con . y, sí, hará la misma operación en la próxima coincidencia del patrón de búsqueda. Esto se vuelve extraordinariamente útil cuando comienzas a buscar con expresiones regulares complicadas.

+3

Esto no funciona en Vim 7.3.46, pero sí en 7.3.736. – bentsai

Cuestiones relacionadas