Digamos que tengo el siguiente archivo muy simple
a
b
c
d
e
y he decidido que quiero agregar líneas vacías después de cada línea. Varios métodos diferentes saltan inmediatamente a mi mente. Podríamos hacerlo (y así aceptar el fracaso). Podríamos grabar una macro como qqo<ESC>jq
y repetirla varias veces.
Otros dos métodos me parecieron más obvios en ese momento.
En primer lugar, pensé que emitiría el :norm
comando o
en cada línea. Entonces corro :%norm o
. Pero lo que realmente sucede es que obtenemos 5 líneas en blanco, seguidas por las líneas no separadas como se indicó anteriormente. Interpreto que esto significa que %norm
, en realidad, vim recoge el mensaje emitiendo el siguiente comando normal en las primeras cinco líneas de este archivo de cinco líneas . El o
comando crea una nueva línea y vim es "tonto" en el sentido de que hace referencia por número de línea y no por algún otro identificador.
Bueno, estaba avergonzado. Por supuesto. Intenté algunas otras cosas para ver si podía hacer que el método anterior funcionara, pero, por desgracia, no pude. Por curiosidad, probé mi otro método de aplicación masiva favorito. Esto me llevó a intentarlo :g/^/norm o
. Para mi sorpresa, ¡esto funciona bien! Entonces, a mis ojos, parece que vim no es "tonto" aquí de la misma manera que arriba y hace referencia a las líneas en más que solo el número de línea.
¿Qué está pasando exactamente?
fuente
:%s/$/\r/
, o como esto::%s/\n/\r\r/
. La conclusión es que las nuevas líneas pueden coincidir\n
, pero deben escribirse como\r
valores de reemplazo.Respuestas:
Bueno,
%
es la abreviatura de1,$
(un rango desde la primera línea hasta la última). De:he :%
:Y para
:global
:Entonces, el primer caso es como atravesar una lista mientras se modifica, por lo que un contador en los elementos de la lista se invalida. En el segundo caso, marcamos los elementos a los que queremos apuntar en una pasada, de modo que incluso si la lista se modifica en la segunda pasada, aún sabemos en qué elementos queremos trabajar.
fuente
g
es excesivamente loco, útil. Tengo que pasar más tiempo para ir de usuario medio vi para usuario avanzado