ex
ist die Kommandozeilenversion für vi
, und viel einfacher in Skripten zu verwenden.
ex $yourfile <<EOEX
:%s/$string_to_replace/$string_to_replace_it_with/g
:x
EOEX
Sie haben gefragt, wie man "etwas" über vim in eine Textdatei schreibt, und noch keine Antwort hat dies unbedingt abgedeckt.
So fügen Sie Text ein:
ex $yourfile <<EOEX
:i
my text to insert
.
:x
EOEX
:i
wechselt in den Einfügemodus. Alle folgenden Zeilen sind eingefügter Text bis .
erscheint von selbst in einer eigenen Zeile.
So können Sie auch suchen und einfügen. Sie können zum Beispiel Folgendes tun:
ex $yourfile <<EOEX
:/my search query\zs
:a
my text to insert
.
:x
EOEX
Dadurch wird die erste Auswahl gefunden, die mit dem durch :/
angegebenen regulären Ausdruck übereinstimmt , platzieren Sie den Cursor an der durch \zs
angegebenen Stelle , und wechseln Sie nach dem Cursor in den Einfügemodus.
Sie können \zs
verschieben unterschiedliche Ergebnisse zu erzielen. Zum Beispiel:
ex $yourfile <<EOEX
:/start of match \zs end of match
:a
my text to insert
.
:x
EOEX
Dadurch wird das erste Vorkommen von "Beginn der Übereinstimmung, Ende der Übereinstimmung" in "Beginn der Übereinstimmung, mein Text zum Einfügen des Endes der Übereinstimmung" geändert.
Wenn Sie bei Ihren Suchen zwischen Schlüsselwörtern beliebig viele Leerzeichen zulassen möchten, verwenden Sie \_s*
. Suchen Sie beispielsweise nach einer Funktion, die 0 zurückgibt::/\_s*return\_s*0}
Wenn Sie die Arbeit innerhalb von vim oder gvim sehen möchten, können Sie --remote-send
verwendengvim --servername SHELL_DRIVER
bashpromt# cat mybash.sh
#!/bin/bash
echo "about to open $1"
gvim --servername SHELL_DRIVER $1 #I need to use vim application to open a file
#now write something into file.txt and close it
gvim --servername SHELL_DRIVER --remote-send '<ESC>i something to the file<ESC>:wq<CR>'
echo "done."
Dies wird langsam sein, aber das tun, was Sie wollen.
Zuerst öffnen wir ein gvim, in dem wir alle unsere Dateien öffnen können (aus Effizienzgründen).
Mit der ersten gvim-Zeile öffnen wir die Datei im zuvor geöffneten gvim.
In der zweiten gvim-Zeile senden wir einen Befehl an die zuvor geöffnete Instanz von gvim (wobei die gewünschte Datei noch geöffnet ist).
Der Befehl lautet wie folgt:
<ESC>
- Beenden Sie jeden Modus, in dem sich gvim möglicherweise befand
i something to the file
- Gehen Sie in den Einfügemodus und geben Sie "etwas in die Datei" ein
<ESC>
- Einfügemodus verlassen
:wq
- Schreiben Sie die Datei und beenden Sie vim
Vim hat mehrere Optionen:
-c
=> Ex-Befehle übergeben. Beispiel:vim myfile.txt -c 'wq'
um zu erzwingen, dass die letzte Zeile einer Datei mit Zeilenumbruch beendet wird (es sei denn,binary
wird in irgendeiner Weise durch ein Skript gesetzt)-s
=> Spielen Sie ein Scriptout ab, das mit-W
aufgenommen wurde . Wenn Ihre Datei beispielsweiseZZ
enthält , dannvim myfile.txt -s the_file_containing_ZZ
wird dasselbe tun wie zuvor.
Beachten Sie auch, dass es als ex
aufgerufen wird , vim startet im Ex-Modus; Sie können es mit ex my_file.txt <<< wq
versuchen