Tengo líneas como
abcdefgjoin!
abcdef
no join
abcdefgjoin!
Si una línea coincide con la expresión regular ^a.+g$
entonces me gustaría que se unieran, así sería:
abcdefgjoin!
abcdef
no join
abcdefgjoin!
¿Hay alguna forma de hacerlo en VIM
? ?
Respuesta aceptada:
En modo normal, J
(a diferencia de j
, que mueve el cursor una línea hacia abajo) se usa para unir una línea con la que está directamente debajo de ella. Sin embargo, por defecto agrega un espacio al final de la primera línea; para obtener el resultado que desea (unir las líneas sin insertar un espacio adicional), habría que usar gJ
.
Para usar comandos de modo normal en modo ex (que ingresa presionando :
mientras está en modo normal), uno debe usar el normal
dominio. Ver :h normal
dentro de vim. Entonces, para trabajar con la siguiente línea que coincida con el patrón, uno usaría (tenga en cuenta que, de manera predeterminada, debe escapar del +
para que funcione con la expresión regular de vim, una consecuencia de mantener la compatibilidad con el antiguo motor de expresión regular de vi original):
:/^a.\+g$/normal gJ
Para trabajar en cada línea que coincida con el patrón, uno usaría el :global
comando (ver :h :g
dentro de vim) así:
:global/^a.\+g$/normal gJ
O, más concisamente:
:g/^a.\+g$/norm gJ
También es posible usar el comando ex join
(ver :h :join
) para lograr lo mismo escribiendo un poco menos (el !
al final, en este caso, dice join
no insertar un espacio al final de la primera línea).
:g/^a.\+g$/join!