Gebrauch von ! in VIM

8

Ich habe gesehen, dass das manchmal :qfunktioniert, aber manchmal müssen wir es verwenden :q!. Dies ist bei vielen Befehlen der Fall. Ich habe mich gefragt, was !in vimund wann allgemein verwendet wird . Ich habe versucht, dies zu googeln, aber es scheint, dass bei der Suche das Ausrufezeichen weggelassen wird.

user2179293
quelle
6
Wenn Sie vim auf Ihrem Computer installiert haben, sollten Sie auch den interaktiven vim-Tutor haben. Verwenden Sie über die Befehlszeile (NICHT aus vim heraus) vimtutor. Es dauert ungefähr eine halbe Stunde und ist der beste Weg, um die Grundlagen von vi / vim zu lernen.
Evilsoup

Antworten:

23

Wenn Sie keine Änderungen am eigentlichen Inhalt der Datei vornehmen, können Sie einfach mit beenden :q. Wenn Sie jedoch Änderungen vornehmen, lässt vim kein einfaches Beenden zu, da Sie diese Änderungen möglicherweise nicht aufgeben möchten (insbesondere, wenn Sie lange Zeit in vim gearbeitet und :qversehentlich verwendet haben). In :q!diesem Fall wird die Beendigungsoperation erzwungen (Warnung überschreiben). Sie können allen geöffneten Fenstern (z. B. den mit geöffneten Ctrlwn) mit ein erzwungenes Beenden erteilen :qa!.

Sie können Änderungen ausschreiben und mit :wq(oder :x) beenden. Dies schlägt manchmal fehl (die Datei wurde schreibgeschützt geöffnet ( -Rin der Befehlszeile oder vim wurde mit dem viewBefehl aufgerufen ). In diesem Fall können Sie den Schreibvorgang mit erzwingen :wq!.

Als Nebenwirkung , können Sie auch ZQdie gleiche Operation zu tun , wie :q!und ZZdie gleichen wie zu tun :wq, was auf den Händen zum Tippen einfacher sein können :)

Vim verfügt außerdem über eine integrierte Hilfe, über die Sie darauf zugreifen können :help. Das Beenden hat eine eigene schnelle Themenseite : :help Q_wq.

Drav Sloan
quelle
2
In einem anderen Fall können Sie auch !Shell-Befehle wie in:!ls -l
Joseph R.
1
wie geht das! im Falle von ': r! Befehl 'dient zum Erzwingen der Ausgabe des Befehls in die Datei
user2179293
:r! commandist sehr ähnlich zu !!command, der erstere fügt die Befehlsausgabe in die folgende Zeile nach dem Cursor ein, der letztere ersetzt den Inhalt der vorhandenen Zeile.
Drav Sloan
2

Es gibt keine "allgemeine Verwendung" von !, es ist nur ein Modifikator. Jeder Befehl kann auswählen, was ein Extra !tun soll.

In vielen Fällen werden Befehle so programmiert, dass sie !erzwungen werden. Beispiele sind, qdass Sie erwähnen, aber auch save: save!überschreibt die Datei, wenn sie bereits vorhanden ist, gibt savejedoch einen Fehler zurück und schlägt vor, sie zu verwenden, save!wenn Sie sicher sind, was Sie tun.

Schließlich !wird es alleine für Shell-Befehle verwendet, zum Beispiel :!lsoder :!mkdir foo.

Im Fall von read(aus Ihrem Kommentar) wird der Befehl read! <something>von Vim als "Ausführen <something>und Lesen (dh in Vim Schreiben in Puffer) seiner Ausgabe" interpretiert . Hier ist es also so, als ob sich das !nicht als Modifikator des readBefehls verhält, sondern als eigenständiger Befehl !. Es kann sein, dass der readBefehl keine Variante mit deklariert, !sodass Vim den Rest nur unabhängig interpretiert (also ein " !allein verwendet" danach liest read), oder dass readeine Variante mit !diesem bestimmten Verhalten deklariert ( "Rest als Shell ausführen"). ) das ahmt nach, was der " !allein benutzte" tut.

Ich denke, das Mitnehmen ist: Es gibt keine Regel, jeder Befehl definiert, was zu !tun ist, und während versucht wird, eine gewisse Konsistenz in der Wirkung von Modifikatoren zu erzielen, gibt es keine sehr strengen Regeln (wie " !wird es immer sein" zum Erzwingen " ) erlauben, nützlichere Verhaltensweisen mit weniger Tastenanschlägen zu haben, was ebenfalls ein Plus ist.

Cédric Van Rompay
quelle
1
... auch der nervige Unterschied zwischen :w!catund:w !cat
muru