Pregunta

Vamos a decir que tengo el siguiente texto en Vim:

file1.txt
file2.txt
file3.txt

renamed1.txt
renamed2.txt
renamed3.txt

Quiero una transformación de la siguiente manera:

file1.txt renamed1.txt
file2.txt renamed2.txt
file3.txt renamed3.txt

Lo que tengo en mente es algo como lo siguiente:

:1,3 s/$/ <the text that is 4 lines below this line>

Me tengo que quedar con la forma de especificar la parte <the text that is 4 lines below this line>.

He intentado algo así como .+4 (4 líneas por debajo de la línea actual), pero en vano.

¿Fue útil?

Solución

Puede hacerlo con el corte en forma de bloques y pegar.

1) Insertar espacio en el inicio de cada línea "renombrado", por ejemplo, :5,7s/^/ /

2) Uso en forma de bloques selección visual (ctrl-v) para seleccionar todas las líneas "archivo", y pulse d para eliminarlos

3) el uso por bloques selección visual de nuevo para seleccionar el carácter de espacio en el inicio de todas las líneas cambiado el nombre y pulse p. Esto pegará la línea correspondiente del bloque que eliminó al comienzo de cada línea.

Otros consejos

:1,3:s/\ze\n\%(.*\n\)\{3}\(.*\)/ \1

Explicación:

 \ze - end of replaced part of match - the string matched by the rest of the pattern will not be consumed
 \n - end of current line
 \%(.*\n\)\{3} - next 3 lines
 \(.*\) - content of 4th line from here

Esto dejará las líneas posteriores donde se encuentren.

Me haría una macro para esto realmente. Eliminar la línea inferior, moverse hacia arriba, pegar, líneas Join, a continuación, ejecutar la macro en los otros. El otro método, creo que sería apropiado es una secuencia de comandos independiente para actuar como un filtro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top