Frage

Lassen Sie uns sagen, dass ich den folgenden Text in Vim haben:

file1.txt
file2.txt
file3.txt

renamed1.txt
renamed2.txt
renamed3.txt

Ich möchte eine Transformation wie folgt:

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

Was ich im Sinne habe, so etwas wie die folgenden Ergebnisse:

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

Ich bin stecken mit, wie der <the text that is 4 lines below this line> Teil angeben.

Ich habe so etwas wie .+4 versucht (4 Zeilen unter der aktuellen Zeile), aber ohne Erfolg.

War es hilfreich?

Lösung

Sie können es mit blockartiger Schnitt tun & paste.

1) Einlegeraum am Beginn jeder „umbenannt“ -Linie, z.B. :5,7s/^/ /

2) Verwendung blockartig visuelle Auswahl (ctrl-v) alle „Datei“ die Linien zu wählen, und drücken Sie d sie löschen

3) Verwendung blockweise wieder visuelle Auswahl das Leerzeichen am Anfang aller umbenannten Linien zu wählen, und drücken Sie p. Dadurch wird die entsprechende Zeile aus dem Block einfügen Sie zu Beginn jeder Zeile gelöscht.

Andere Tipps

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

erklärt:

 \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

Damit werden die späteren Linien lassen, wo sie sind.

Ich würde ein Makro für das wirklich machen. Löschen Sie die untere Linie, nach oben, einfügen, Join Linien, dann führen Sie das Makro auf die anderen. Die andere Methode, die ich denke, angemessen wäre, ist ein separates Skript als Filter zu wirken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top