Nehmen wir an, ich habe die folgende sehr einfache Datei
a
b
c
d
e
und ich habe beschlossen, dass ich nach jeder Zeile leere Zeilen hinzufügen möchte. Mir fallen sofort verschiedene Methoden ein. Wir könnten es einfach tun (und somit das Scheitern annehmen). Wir könnten ein Makro wie aufnehmen qqo<ESC>jq
und es mehrmals wiederholen.
Zwei andere Methoden schienen mir damals offensichtlicher.
Erstens dachte ich, ich würde den :norm
Befehl o
in jeder Zeile ausgeben . Also renne ich :%norm o
. Was aber tatsächlich passiert, ist, dass wir 5 Leerzeilen erhalten, gefolgt von den nicht getrennten Zeilen wie oben. Ich interpretiere dies so, dass %norm
vim das Nachrichtenproblem tatsächlich mit dem folgenden normalen Befehl in den ersten fünf Zeilen dieser fünfzeiligen Datei aufgreift . Der o
Befehl erstellt eine neue Zeile und vim ist "dumm" in dem Sinne, dass es nach Zeilennummer und nicht nach einer anderen Kennung verweist.
Nun, ich war verlegen. Sicher. Ich habe ein paar andere Dinge versucht, um zu sehen, ob ich die obige Methode zum Laufen bringen kann, aber leider konnte ich nicht. Aus Neugier habe ich meine andere Lieblingsmethode zum Auftragen von Massen ausprobiert. Dies veranlasste mich, es zu versuchen :g/^/norm o
. Zu meiner Überraschung funktioniert das ganz gut! Meiner Meinung nach scheint vim hier nicht so "dumm" zu sein wie oben und verweist auf Zeilen nicht nur durch die Zeilennummer.
Was genau ist los?
:%s/$/\r/
oder so ::%s/\n/\r\r/
. Das Mitnehmen ist, dass Zeilenumbrüche abgeglichen werden können\n
, aber wie\r
in Ersatzwerten geschrieben werden müssen.