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"