Wie verwende ich vim in der Befehlszeile, um in der Mitte einer Datei Text hinzuzufügen?

Wie verwende ich vim in der Befehlszeile, um in der Mitte einer Datei Text hinzuzufügen?

Ich versuche, einen Befehl etwa wie folgt zu schreiben:

vim -c "XXXXXX" myFile

Anstelle von „XXXXX“ möchte ich vim einige Befehle übergeben, um an einer beliebigen Stelle in der Datei Text hinzuzufügen, sowohl durch Angabe einer genauen Zeilennummer als auch, in einem anderen Szenario, durch Suchen nach einer bestimmten Zeile und anschließendes Einfügen in die darüber liegende Zeile.

Ich versuche eine Art cleveres „Anhängen“, bei dem ich Zeilen an einen Codeblock oder eine Funktion innerhalb eines Skripts anhängen kann. Letztendlich ziele ich auf ein Setup-Skript ab, das vielleicht ein Dutzend Systemdateien ändert.

Im Idealfall wäre nur ein -c-Flag erforderlich und im Idealfall wäre es für jeden lesbar, der Befehle im Normalmodus versteht – in meinem Kopf dachte ich ursprünglich an so etwas wie: „ "ggjjjiInsertingOnLine4:wq"Sobald ich es in den Normalmodus versetzen kann.“

Antwort1

Befehlszeilenbereiche können verwendet werden, um eine bestimmte Zeile auszuwählen, die bearbeitet werden muss. Anschließend kann das Ersetzungsmuster verwendet werden, um die Bearbeitung (Anhängen) durchzuführen.

So fügen Sie beispielsweise den Text „hi“ am Anfang von Zeile 3 an:

vim -c "3 s/^/hi/" -c "wq" file.txt

So fügen Sie den Text „hi“ am Ende von Zeile 3 an:

vim -c "3 s/$/hi/" -c "wq" file.txt

Weitere Optionen und Erklärungen finden Sie hier:

vim -c "help cmdline-range"

Weitere Beispiele

So suchen Sie nach der Suchzeichenfolge „hi“ und hängen in Zeile 3 die Zeichenfolge „everyone“ an:

vim -c "3 s/\(hi\)/\1 everyone/" -c "wq" file.txt

So suchen Sie nach der Suchzeichenfolge „hi“ und stellen in Zeile 3 die Zeichenfolge „say“ voran:

vim -c "3 s/\(hi\)/say \1/" -c "wq" file.txt

Falls die Zeilennummer nicht bekannt ist, können Sie die ersten Vorkommen der Zeichenfolge „hi“ in jeder Zeile mit „all“ anhängen:

vim -c "1,$ s/\(hi\)/\1 all/" -c "wq" file.txt

So hängen Sie alle Vorkommen der Zeichenfolge „hi“ an jede Zeile mit „all“ an:

vim -c "1,$ s/\(hi\)/\1 all/g" -c "wq" file.txt

Weitere Informationen zu Ersetzungen:

vim -c "help substitute"

verwandte Informationen