Wozu dient der EX-Modus für die Stapelverarbeitung?

11948
Léo Léopold Hertz 준영

In diesem 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?

Wozu dient der EX-Modus für die Stapelverarbeitung?

19
@Masi: Verknüpfen Sie Ihre Konten, sodass migrierte Posts nach der Migration Ihrem SU-Konto zugeordnet werden. Greg Hewgill vor 14 Jahren 0

4 Antworten auf die Frage

22
Jack M.

Im Ex-Modus werden meistens die gleichen Aktionen für eine Reihe von Dateien ausgeführt.

Angenommen, Sie haben 25 .html-Dateien mit:

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

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

vim -E -s bob.html <<-EOF :%substitute/home.html/index.html/ :update :quit EOF 
Eine vollständige - und knappere - Implementierung wäre `for file in * .html; tun Sie vim -es -c '% s / home \ .html / index.html / g' -c wq "$ file"; fertig ". intuited vor 13 Jahren 6
5
u0b34a0f6ae

Seit der letzten Version 7.3, die als permanente Undo-Unterstützung, Ex-Modus und andere Formen der Vim-Stapelverarbeitung anderen Nicht-Vim-Methoden überlegen ist, wird die Undo-Historie nicht beeinträchtigt.

Hinzufügen: 'Persistent rückgängig machen', falls aktiviert, behält alle Änderungen an einer Datei (bis zu einem Limit) im Rückgängig-Verlauf bei vim-Bearbeitungssitzungen bei. Wenn die Datei von einem externen Programm bearbeitet wird, setzt vim den Undo-Verlauf zurück, wenn er anhand der Prüfsumme feststellt, dass sich die Datei geändert hat. Mit vim -E können Sie eine Datei im Stapel bearbeiten, und die Bearbeitung befindet sich im Undo-Verlauf.

Das scheint ziemlich weit hergeholt zu sein, aber es ist sicherlich vernünftig und klug! +1 Tarrasch vor 11 Jahren 2
4
kenorb

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

  • Sie müssen (mehrere) Dateien nicht interaktiv bearbeiten (als Teil des Skripts).
  • 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 häufigste Nutzung und die Menschen es in ähnlicher Weise verwenden, wie sedund awkaber sind sie mehr Strom ausgerichtet sind - sie die Datei nur darauf, von Anfang an lesen zu beenden, während vimPuffer ausgerichtet sind - 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 leistungsfähiger als die Ausdrücke von awk und sed (sie sind nicht dafür ausgelegt, mit mehreren Zeilen zu arbeiten) - zum Beispiel kann vim über mehrere Zeilen passen und unterstützt keine Übereinstimmungen.

Ex ist auch ein Editor (direkter Vorgänger von vi) und emuliert im Vim-Ex-Modus ex(es wird immer noch derselbe Code ausgeführt). Es ist also möglich, den Befehlsmodus exvon vi und umgekehrt aufzurufen. Es gibt den Ex-Modus ( vim -e) und den verbesserten Ex-Modus, der erweiterte Befehle als den vi-kompatiblen Ex-Modus ( vim -E) ermöglicht. Siehe: Was ist der Unterschied zwischen Ex-Modus und verbessertem Ex-Modus?

Ex ist die Wurzel einer Redaktionsfamilie: Edit, Ex und VI. Ex ist ein Super-Set von ed, wobei die bemerkenswerteste Erweiterung eine Anzeige-Bearbeitungsfunktion ist. ex (1)


Beispiel 1

Hier ein einfaches Beispiel 127, 128wie Sie Ihre hostsDatei ändern und die Ausgabe drucken können:

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

ist äquivalent zu:

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

Für eine fortschrittlichere Lösung haben Sie möglicherweise eine Datei mit vim-Befehlen und verwenden diese für einen klassischeren Ansatz für die E / A-Umleitung:

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 Plugins verwenden, um einige Aufgaben auszuführen.

Beispielsweise würde der folgende Einzeiler Ihre Quellcodedatei mithilfe eines der Standard-Plugins in HTML konvertieren:

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 Syntaxhervorhebung) aus Ihrem Code (in einer beliebigen unterstützten Sprache geschrieben), die zum Drucken oder zur Veröffentlichung 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 HTML von der Beispiel-Site heruntergeladen und durch eine automatisch generierte 20x20-Tabelle durch Zufallszahlen ersetzt wird:

" 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 

Verwendungszweck:

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:

1
still_dreaming_1

Dies beantwortet Ihre Frage zur Stapelverarbeitung nicht, aber es ist eine andere Möglichkeit, den Ex-Modus zu erklären. Sie wissen, wie Sie drücken:in den Befehlszeilenmodus wechseln und Befehle eingeben? Im Ex-Modus können Sie auch dieselben Befehle eingeben, es sei denn, Vim verlässt den Ex-Modus nicht, nachdem Sie einen Befehl eingegeben haben. Er bleibt im Ex-Modus und Sie können einen anderen Befehl eingeben. Es ist also eine Art REPL (lesen, auswerten, drucken, schleifen), aber ohne den Druck (also nur ein REL ...). Ich werde später darauf zurückkommen, warum Sie diese Art von REL wünschen. Aus diesem Grund wird Ex-Modus genannt. Sie können hier Ex-Befehle eingeben. Dies ist der gleiche Befehlszeilenmodus, bei dem Sie einen Ex-Befehl eingeben können. Eine andere Erklärung ist, 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 (in geeigneter Weise .vimrc) schreiben. Es ist auch die Sprache, die Sie verwenden, wenn Sie im Befehlszeilenmodus oder im Ex-Modus Ex-Befehle eingeben. Aus dieser Perspektive kann der Ex-Modus als VimL REL betrachtet werden. Warum willst du ein VimL REL? Aus dem gleichen Grund mögen Leute REPLs für andere Sprachen. Sie können sehr 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 gegen den SRP-Principal verstoßen und ihn aufteilen Plugins).

Es wäre großartig, einige Beispiele als Videos zu erhalten, um die Nützlichkeit des Ex-Modus zu zeigen. Ich habe es nie realisiert, weil ich den Linux-Fenstermanager und den visuellen Modus von vim mit `:! Python` usw. verwenden kann. Léo Léopold Hertz 준영 vor 7 Jahren 0