Wofür ist der EX-Modus für die Stapelverarbeitung?

20

Im Tutorial wird erwähnt, dass der Ex-Modus für die Stapelverarbeitung vorgesehen ist. Da es für mich eher ein Ärgernis als ein Werkzeug ist, möchte ich einige praktische Beispiele sehen. Wer benutzt es? Warum?

Wofür ist der EX-Modus für die Stapelverarbeitung?

Léo Léopold Hertz 준영
quelle
@Masi: Verknüpfen Sie Ihre Konten, sodass migrierte Posts nach der Migration mit Ihrem SU-Konto verknüpft werden.
Greg Hewgill

Antworten:

4

Vim im Ex-Modus (auch bekannt als ex) ist nützlich, wenn:

  • Sie müssen (mehrere) Dateien nicht interaktiv (als Teil des Skripts) bearbeiten.
  • Ihre Verbindung ist sehr langsam oder der Bildschirm wird nach Ihren Aktionen nicht aktualisiert.
  • Zuordnungen und Abkürzungen sind deaktiviert.
  • Allgemeine Schlüssel wie Escapeoder Controlfunktionieren nicht richtig.

Bearbeiten von Dateien nicht interaktiv ist die am weitesten verbreitete Anwendung und die Menschen es in ähnlicher Weise unter Verwendung von wie sedund awkwerden jedoch sind sie mehr orientieren Stream - sie die Datei nur von Anfang bis Ende nach vorn lesen , während des vimPuffer ausgerichtet ist - Sie vorwärts und rückwärts bewegen können in der Datei, wie Sie möchten. Zweitens sind die regulären Ausdrücke von vim mächtiger als die Ausdrücke von awk und sed (sie funktionieren nicht mit mehreren Zeilen) - zum Beispiel kann vim über mehrere Zeilen hinweg übereinstimmen und unterstützt keine Übereinstimmungen.

Ex ist auch ein Editor (direkter Vorgänger von vi) und emuliert im Vim-Ex-Modus ex(sie führen immer noch denselben Code aus), sodass es möglich ist, exaus vi heraus in den Befehlsmodus zu gelangen und umgekehrt. Es gibt den Ex-Modus ( vim -e) und den verbesserten Ex-Modus, der erweiterte Befehle als der vi-kompatible Ex-Modus ( vim -E) ermöglicht. Siehe: Was ist der Unterschied zwischen dem Ex-Modus und dem verbesserten Ex-Modus?

Ex ist die Wurzel einer Redaktionsfamilie: edit, ex und vi. Ex ist ein Super-Set von ed, wobei die bemerkenswerteste Erweiterung eine Anzeigebearbeitungsfunktion ist. ex (1)


Beispiel 1

Hier ist einfaches Beispiel für Wechsel 127zu 128Ihrer hostsDatei und drucken Sie die Ausgabe:

ex -s +%s/127/128/g +%p +q! /etc/hosts

ist äquivalent zu:

sed s/127/128/g /etc/hosts

Für eine erweiterte Lösung verfügen Sie möglicherweise über eine Datei mit vim-Befehlen, die Sie mit einem klassischeren Ansatz für die E / A-Umleitung verwenden können:

echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts

Beispiel 2

Sie können auch vim-Plug-ins verwenden, um einige Aufgaben auszuführen.

Der folgende Einzeiler konvertiert beispielsweise Ihre Quellcodedatei mit einem der Standard-Plugins in HTML:

ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c

Es generiert eine HTML-Datei (mit Hervorhebung der Syntax) aus Ihrem Code (in einer beliebigen unterstützten Sprache), die zum Drucken oder zum Veröffentlichen auf Ihrer Website bereit ist.


Beispiel 3

Oder ein echtes Live-Beispiel aus der RPM- Spezifikation:

vim -E -s Makefile <<-EOF
   :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
   :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
   :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
   :update
   :quit
EOF

Beispiel 4

Das folgende Skript erstellt eine neue HTML-Datei, indem es die HTML-Datei der Beispielsite herunterlädt und ihren Text durch eine automatisch generierte 20x20-Tabelle mit Zufallszahlen ersetzt:

" table.vim
%!curl -s example.com 
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq

Verwendung:

ex -s table.html < table.vim

Dies funktioniert auf * nix-ähnlichen Systemen, auf denen curl installiert ist. Hinzufügen -V, um das Skript in Aktion zu sehen.

Mehr Beispiele:


Siehe auch:

Kenorb
quelle
22

Der Ex-Modus dient hauptsächlich zum Ausführen der gleichen Aktion für eine Reihe von Dateien.

Angenommen, Sie haben 25 .html-Dateien, alle mit:

<a href="/superuser//home.html"> ...

Anstatt jeden einzelnen davon zu öffnen, können Sie den Ex-Modus verwenden, um alles zu ändern in index.html:

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF
Jack M.
quelle
7
Eine vollständige und knappe Implementierung wäre for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done.
Intuited
6

Ab Version 7.3 sind der Ex-Modus und andere Formen der VIM-Stapelverarbeitung als permanente Unterstützung für das Rückgängigmachen anderen Nicht-VIM-Methoden überlegen, da die Rückgängigmachungshistorie nicht beeinträchtigt wird.

Hinzufügen: Wenn diese Option aktiviert ist, werden alle Änderungen an einer Datei (bis zu einem bestimmten Grenzwert) im Rückgängig-Verlauf über vim-Editiersitzungen hinweg beibehalten. Wenn die Datei von einem externen Programm bearbeitet wird, setzt vim den Rückgängig-Verlauf zurück, wenn durch eine Prüfsumme festgestellt wird, dass er geändert wurde. Mit vim -E können Sie eine Datei stapelweise bearbeiten, und die Bearbeitung wird im Rückgängig-Verlauf gespeichert.

u0b34a0f6ae
quelle
2
Dies scheint ziemlich weit hergeholt, aber es ist sicher vernünftig und klug! +1
Tarrasch
1

Dies beantwortet nicht Ihre Frage zur Stapelverarbeitung, ist jedoch eine weitere Möglichkeit, den Ex-Modus zu erläutern. Sie wissen, wie Sie drücken:in den Befehlszeilenmodus wechseln und Befehle eingeben? Im Ex-Modus können Sie auch dieselben Befehle eingeben, außer dass Vim den Ex-Modus nach Eingabe eines Befehls nicht verlässt, sondern im Ex-Modus bleibt und Sie einen anderen Befehl eingeben können. Es ist also eine Art REPL (Lesen, Auswerten, Drucken, Schleifen), aber ohne den Ausdruck (also nur ein REL ...). Ich werde später darauf zurückkommen, warum Sie diese Art von REL möchten. Das ist der Grund, warum es Ex-Modus heißt. Hier können Sie Ex-Befehle eingeben, genau wie im Befehlszeilenmodus. Hier können Sie einen Ex-Befehl eingeben. Eine andere Möglichkeit, dies zu erklären, besteht darin, dass Sie Vimscript / VimL-Code eingeben und sofort ausführen können. Vimscript / VimL ist eine Sprache, in der Sie Vim-Plugins schreiben können. Es ist auch die Sprache, in der Sie Ihre Konfigurationsdatei (möglicherweise .vimrc) schreiben. Dies ist auch die Sprache, die Sie verwenden, wenn Sie Ex-Befehle im Befehlszeilenmodus oder im Ex-Modus eingeben. Aus dieser Perspektive kann der Ex-Modus als VimL REL angesehen werden. Warum möchtest du ein VimL REL? Aus dem gleichen Grund mögen Leute REPLs für andere Sprachen. Sie können wirklich hilfreich sein, um Code zu debuggen oder mit der Sprache zu experimentieren, um zu sehen, wie die Dinge funktionieren, insbesondere wenn Sie Plugins in VimL schreiben oder Ihre Konfigurationsdatei stark anpassen (was wahrscheinlich bedeuten würde, dass Sie das SRP-Prinzip verletzen und es aufteilen sollten) Plugins).

still_dreaming_1
quelle
Es wäre großartig, einige Beispiele als Videos zu erhalten, um die Nützlichkeit des Ex-Modus zu demonstrieren. Ich habe es nie bemerkt, weil ich den Linux Window Manager und den visuellen Modus von vim mit :!pythonusw. verwenden kann
Léo Léopold Hertz '27.