Vim hat einen Ex-Modus, der durch Eingabe eingegeben werden kann Q, und einen Befehlszeilenmodus, der mit eingegeben werden kann q:. Eine häufige Beschwerde unter neuen VIM-Benutzern ist, dass sie diese Modi versehentlich aufrufen, wenn sie versuchen, VIM zu beenden. Als solches deaktiviere ich diese Tasten in meinem ~/.vimrc
, um mich davon abzuhalten, sie versehentlich zu treffen (insbesondere q:):
map q: <Nop>
nnoremap Q <nop>
Obwohl ich die Vim-Dokumentation zu Ex gelesen habe , ein mäßig erfahrener Vim-Benutzer bin und die Grundidee dahinter verstehe, habe ich immer noch Schwierigkeiten, eine Verwendung für meinen täglichen Vim-Gebrauch zu finden. Im Allgemeinen scheint es weniger nützlich zu sein, als nur einen Standard-vim-Befehlszeilenbefehl mit vorangestelltem Präfix einzugeben :, da Änderungen nicht sofort übernommen werden.
Hat Ex im modernen Vim einen praktischen Alltag? Gibt es etwas, das im Ex-Modus einfacher zu tun ist als mit Standardbefehlen? Was ist der Unterschied zwischen Kommandozeilenmodus und Ex-Modus?
Q
undq:
sind ganz anders. Sie beziehen sich nur aufQ
richtig?q:
speziellem gefragt und es als unter den beiden Schlüsselsequenzen diejenige erwähnt, mit der Sie am meisten Probleme haben. Und zwei der Antworten hier könnten für Leute nützlich sein, die nach dem richtigen Begriff suchen.q/
und zuq:
tun, werden Sie wahrscheinlich sie einige der wichtigsten Befehle in Vim betrachten. Und ja, Sie wissen bereits , wie man sie benutzt, Sie wissen nur noch nicht, was sie tun. Sehen Sie sich diesen Screencast an, um es herauszufinden.Antworten:
Q
ist, wie Sie gefunden haben, Ex-Modus. Es ist nicht ganz nützlich, interaktiv zu verwenden, aber es ist vorhanden, weil Vim zum Emulieren der altenex
Binärdatei verwendet werden kann. Tatsächlich stellen viele Systeme denex
Befehl durch einfaches Verknüpfen mit bereitvim
.q:
Oder:<C-f>
stellt stattdessen einen Weg , um Ihren Befehlszeilenverlauf zu durchsuchen und es wie ein normaler Puffer zu bearbeiten. Dies erleichtert das Auffinden eines zuvor ausgeführten Befehls, das Bearbeiten mit normalen Vim-Befehlen und das Ausführen des geänderten Befehls. Dieq/
undq?
Befehle existieren , um die gleiche Funktionalität für die Historie der Suche zur Verfügung zu stellen.quelle
Vim im Ex-Modus ist nützlich, wenn:
Grundsätzlich
vi
ist der visuelle Modus für denex
Vim Ex-Modus nur eine Emulationex
(sie führen immer noch den gleichen Code aus), so dass es möglich ist,ex
von vi aus in den Befehlsmodus zu gelangen und umgekehrt. Tatsächlich gibt es zwei Modi: Ex-Modus (vim -e
) und verbesserter 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?Bearbeiten von Dateien nicht interaktiv ist die am weitesten verbreitete Anwendung und die Menschen es in ähnlicher Weise verwenden , wie
sed
undawk
aber sind sie mehr Strom ausgerichtet sind - sie die Datei nur darauf , von Anfang an lesen zu beenden (sie sind nicht mit mehreren Linien zu arbeiten entworfen ) whilevim
ist pufferorientiert - Sie können sich in der Datei vorwärts und rückwärts bewegen, wie Sie möchten, was sie so leistungsfähig macht.Grundsätzlich gilt:
Trotzdem scheinen die Leute es zu missbrauchen, weil sie versuchen, Dateien zu bearbeiten, und die Wahrheit ist, dass es keine Dateien bearbeitet. Zweitens handelt es sich bei den Optionen wie in-place (
-i
) um nicht standardmäßige FreeBSD-Erweiterungen, die unter anderen Betriebssystemen möglicherweise nicht verfügbar sind. Wenn Sie also nicht portierbaren Code, I / O-Overhead und unerwünschte Nebeneffekte (z. B. das Zerstören von Symlinks) vermeiden möchten, sollten Sieex
den standardmäßigen befehlsbasierten UNIX-Editor (zusammen mit BashFAQed
) verwenden .Andere Dinge, die ich im Ex - Modus nützlich finde, sind, sie als Spielwiese (ähnlich wie eine
python
Konsole) zu verwenden, auf der Sie viele Befehle hintereinander ausführen, reguläre Ausdrücke bearbeiten / debuggen, die vim - Konfiguration überprüfen, externe Befehle ausführen oder mit Registern arbeiten können usw .Zum Beispiel:
Das ist im Ex-Modus einfacher als im normalen Modus (wo Sie nur Ihren letzten Befehl sehen können).
Praktische Verwendungen
Ich habe die folgenden Aliase in meinem
.bash_aliases
:Hinweis: Die Verwendung von
bufdo
ist nichtex
POSIX-konform (wie im Handbuch beschrieben ). Sie können sie alsofind
stattdessen mit verwenden. Das!
wird verwendet, um das Umschalten der Puffer ohne Speichern zu erzwingen (andernfalls wird eine Warnung generiert).Das erste, mit dem ich die nachgestellten Leerzeichen in all meinen Quelldateien abschneide, zB:
Der zweite konvertiert alle Tabulatoren in Leerzeichen (rekursiv), zB:
Für mich ist das Verwenden
retab
ausreichend, aber es gibt einige Nachteile, die hier beschrieben werden . Fügen Sie Extra-V
für erhöhte Ausführlichkeitsausgabe hinzu.Beachten Sie, dass obigen Beispiele mit zsh / bash4 Globbing (
**
), so stellen Sie sicher , dass Ihre Shell unterstützt und es aktiviert ist .Weitere praktische Beispiele (wie das Parsen von HTML-Dateien) finden Sie unter:
Wie konvertiere ich eine Quelltextdatei in HTML?
Z.B
Weitere Informationen zum Ex-Modus finden Sie auch unter:
quelle
ex
als es mit isted
,sed
oderawk
?ex
Modus besser zu verstehen . Ich verstehe nicht, warum Sie einen Knall (!
) in Ihremtrim
Alias-bufdo
Befehl haben. Wird das nicht einfach alle Änderungen in allen Dateien außer der letzten aufgeben? Wenn nein, warum nicht?!
grundsätzlich nicht, da sich jedes Mal, wenn der Puffer gewechselt wird,ex
über nicht gespeicherte Änderungen beschwert (und wir speichern die Änderungen ganz am Ende mitxa
). Die Warnung kann deaktiviert werden, das Hinzufügen ist jedoch viel einfacher!
.!
der Befehl fehlschlägt, wenn der Puffer nicht verzichtet werden kann, aber es gibt nicht ausdrücklich , dass!
der Puffer wird dazu führen , nicht verworfen werden .... also, nicht „verlassen“ bedeutet in diesem Fall „fallen gelassen , weil es nichts enthält, was nicht auf die Festplatte geschrieben wurde "? Oder was? (Ich schaue:help bufdo
)Ich benutze den Ex-Modus selten, aber wenn ich ihn brauche, bin ich dankbar für seine Existenz.
Ich greife manchmal über ssh über VPN auf Systeme zu, und diese Verbindungen können manchmal langsam werden. Um das Problem zu verschlimmern, muss ich manchmal eine Datei auf der Remote-Seite bearbeiten, die sich nicht nur hinter ssh und VPN befindet, sondern auch über eine langsame serielle Verbindung (also 9600 Baud plus viel Netzwerklatenz).
Es ist eine Zeit wie diese, in der visuelle Rückmeldungen und Bildschirmaktualisierungen eher hinderlich sind, weil das, was ich sehe, verzögert ist (der Effekt ist wie in ein Mikrofon zu sprechen, aber mit weit entfernten Lautsprechern, wie in einem Sportstadion. Die Aktionen werden abgehackt und manchmal durch die verzögerte Rückmeldung verwirrt).
In diesem Fall ist es ein nützlicher Vorteil, wenn die Änderungen nicht zurückgespielt werden, da ich mehr in kürzerer Zeit erledigen kann, wenn ich nicht auf die Aktualisierung des Bildschirms warte.
Wenn ich fertig bin, kehre ich in den visuellen Modus zurück, um eine einmalige Bildschirmaktualisierung durchzuführen und meine Arbeit zu überprüfen. Dann kann ich in den Ex-Modus zurückkehren oder speichern, weil ich fertig bin.
quelle
Das Befehlszeilenfenster ist nützlich, um lange, komplizierte Befehle zu schreiben. Da der Befehlsverlauf als Fenster geöffnet wird, können Sie alle vim-Navigations- oder Bearbeitungsbefehle / -zuordnungen verwenden.
Angenommen, Sie möchten einen langen Ersetzungsbefehl bearbeiten, den Sie einmal ausgeführt haben, bei dem jedoch ein Fehler aufgetreten ist:
Um den Suchbegriff zu ändern, können Sie keine vim-Bewegungen wie
b
in der Ex-Zeile zum Navigieren verwenden (obwohl ich glaube, dass es Tastenzuordnungen für diese Navigation gibt). Stattdessen drückten die meisten Leute mehrmals die linke Pfeiltaste.Ein besserer Weg: Drücken Sie
q:
, um in das Befehlszeilenfensterk
zu gelangen, um zum letzten Befehl zu gelangen und mit normalen Bewegungen zu dem Teil des Befehls zu navigieren, den Sie ändern möchten. Möchten Sie ein ganzes Wort ändern, kein Problem:ciw
.quelle
q:
es sich bei der Ex-Befehlszeile handelt? In der Hilfe wird nur der Ausdruck "Ex" für den von aufgerufenen Modus verwendet.Q
Dies unterstützt jedoch nicht die Standard-VIM-Bearbeitung, auf die Sie sich beziehen. Inq:
der Hilfe wird lediglich der "Befehlszeilenmodus" aufgerufen. Ich weiß, dass ich die beiden zuerst verwechselt habe, aber wir sollten wahrscheinlich sicherstellen, dass wir uns über die Unterscheidung hier im Klaren sind.:help q:
bevor ich mich dazu entschlossen habe, diesen Ausdruck zu verwenden, aber ich könnte über die Terminologie verwirrt sein.:
, aber ich könnte das falsch verwenden.q:
öffnet keine Ex-Befehlszeile. Es öffnet sich das Befehlsverlaufsfenster , in dem die aktuellen und vorherigen Ex-Befehle bearbeitet werden können. Die Ex-Befehlszeile erhalten Sie, wenn Sie:
im normalen Modus drücken .:
Befehle als 'Ex'-Befehle bezeichnet. IMHO sollten wirklich nur die Befehle, die tatsächlich in Ex verfügbar sind, als Ex-Befehle betrachtet werden.Mir wurde von einer Person mit eingeschränktem Sehvermögen, die erblindet, gesagt, dass er zu Ex wechselt. Ich selbst bin wesentlich älter als vi und habe vor langer Zeit von ed auf ex gewechselt (ja, ich weiß, "ed ist der Standardeditor"). Das einzige, was ich im vi-Modus mache, ist% -Hüpfen, um beim Schreiben von Lisp-Code mit den Parens übereinzustimmen.
quelle
ex
ausdrücklich erwähnt wurde.Abgesehen von den hier bereits erwähnten Verwendungen ist ex auch eine Möglichkeit, Dateien auf der Linux-Konsole zu bearbeiten, wenn sich diese auf der S / 390-Plattform befindet und die Konsole zeilenorientiert statt bildschirmorientiert ist.
quelle
Wahrscheinlich nicht. Während der Eintritt in den Ex-Modus nicht wirklich nützlich ist, ist das Erlernen von Ex-Befehlen dennoch nützlich, insbesondere, weil Sie Ex-Bearbeitungsbefehle mit
:g/
globalen Befehlen verwenden, um auf übereinstimmenden Zeilen zu arbeiten.quelle
Das ursprüngliche "ex" war die aktualisierte Version des "ed" -Texteditors in Unix. In 2BSD wurde ein visueller Modus hinzugefügt und der neue Editor wurde "vi" genannt.
Will man die ex-Kommandozeile benutzen, wechselt man mit der Taste ":" in den Kommandomodus. Nach meinem besten Verständnis ist Ex eigentlich nicht für Nostalgie da, sondern für den Befehlsmodus.
Sie können den Einfügemodus auch über aufrufen
Drücken Sie dann "Enter" und geben Sie Ihren Text ein. Beenden Sie mit ^ c. Oder geben Sie alles in einer Befehlszeile ein, wie
quelle