GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Öffnen Sie Vim aus einem Bash-Shell-Skript heraus

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

verwenden
gvim --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 beispielsweise ZZ enthält , dann vim 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


Linux
  1. Verhindern, dass ein Bash-Skript gleichzeitig ausgeführt wird

  2. Kann ein Bash-Skript mit einer Datei verknüpft werden?

  3. Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

  4. Bash-Skript:Prüfen, ob eine Datei eine Textdatei ist?

  5. Kann eine .sh-Datei Malware sein?

Wie man von Vim aus auf die Shell zugreift oder externe Befehle ausführt

35 Bash-Skriptbeispiele

atomare Erstellungsdatei, falls nicht aus dem Bash-Skript vorhanden

Holen Sie sich eine bestimmte Zeile aus einer Textdatei, indem Sie nur ein Shell-Skript verwenden

Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner

bash + liest Variablen und Werte aus der Datei per Bash-Skript