Aplicar el comando de modo normal a las coincidencias de expresiones regulares


10

Estoy usando la siguiente expresión regular para hacer coincidir una cadena de documentación debajo de una definición de función Clojure:

\vdefn.*\n\s*\zs"([^"]|\n)*"

¿Hay alguna manera de ejecutar el gqcomando de modo normal (líneas de formato) en todas las coincidencias de este patrón en un archivo dado?

Respuestas:


10

Poder de g:

:g/\vdefn.*\n\s*\zs"([^"]|\n)*"/normal gngq

La parte entre los /s se explica por sí misma, ya que es la expresión regular de su pregunta original.

normal gngqAl final es algo interesante. gnseleccionará la próxima coincidencia de la expresión regular y gq, por supuesto, formateará esta selección (como mencionó en su pregunta).

:gEs la parte realmente genial. Esta es, en mi opinión, una de las características más útiles de Vim. El gcomando ex toma una expresión regular y un comando Ex, y ejecuta el comando en cada línea que coincida con la expresión regular. Si aún no se ha enterado :g, le recomiendo que lo haga, ya que aumentará enormemente su productividad. Algunos recursos son los propios de Vim :help :go Power of g en Vim wiki.


La gnpieza se selecciona de la línea donde Vse dispara a la siguiente aparición (no la de la misma línea) del patrón. La documentación de Vim establece que si el modo visual está activo, la selección se extiende desde la línea actual hasta el siguiente patrón. Esto está causando un comportamiento no deseado.

@merb Whoops, no me di cuenta de eso. Editado
Pomo de la puerta

La selección sigue desde la línea del partido hasta el próximo partido. Pasar por los comandos del modo normal manualmente muestra que //s<cr>me deja al comienzo de la partida en la línea actual, pero //e<cr>me deja al final de la próxima coincidencia, no en la coincidencia actual.

1
El problema parece ser con //s<cr>V. Cuando corro :normal Ventro en el modo de línea visual, como se esperaba. Cuando corro :normal //s<cr>mi cursor cae en el primero "del partido, como se esperaba. Cuando corro :normal //s<cr>Vno obtengo una selección visual.

1
Resuelto. El comando debe ser normal gngq. Sugerir una edición.
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.