Wie beende ich den Vim-Editor?

3765

Ich stecke fest und kann nicht entkommen. Es sagt:

"type :quit<Enter> to quit VIM"

Aber wenn ich das tippe, erscheint es einfach im Objektkörper.

jclancy
quelle
131
Versuchen Sie nur, VIM zu beenden? Wenn dies der Fall ist, drücken Sie "Escape" und geben Sie ': q'
Pop
47
Vergiss den Doppelpunkt nicht ! Sie sollten eingeben :quitund dann die [ENTER]Taste drücken.
Farahmand
88
Es ist wirklich einfach, die Grundlagen von vim zu erlernen, und es ist direkt in Ihr System integriert. Geben Sie im Terminal "vimtutor" ein. 25 Minuten später sind Sie schneller als mit Ihrem üblichen Texteditor!
Mark Robson
4
Überprüfen Sie hier weitere Befehle.
Toni
78
Um zu verhindern git commit, dass Sie in Zukunft zu vim geschickt werden: git config --global core.editor="nano"
Tom Kelly

Antworten:

4903

Drücken Sie die EscTaste, um in den "Normalmodus" zu gelangen. Anschließend können Sie :eingeben, um den "Befehlszeilenmodus" aufzurufen. Am :unteren Bildschirmrand wird ein Doppelpunkt ( ) angezeigt, und Sie können einen der folgenden Befehle eingeben. Drücken Sie die EnterTaste, um einen Befehl auszuführen .

  • :q zu beenden (kurz für :quit)
  • :q!beenden ohne zu speichern (kurz für :quit!)
  • :wq schreiben und beenden
  • :wq! Schreiben und Beenden, auch wenn die Datei nur Leseberechtigung hat (wenn die Datei keine Schreibberechtigung hat: Schreiben erzwingen)
  • :x schreiben und beenden (ähnlich :wq, aber nur schreiben, wenn es Änderungen gibt)
  • :exitschreiben und beenden (wie :x)
  • :qaalle beenden (kurz für :quitall)
  • :cq Beenden ohne Speichern und Vim einen Fehler ungleich Null zurückgeben lassen (dh mit Fehler beenden)

Sie können Vim auch direkt aus dem "Normalmodus" ZZbeenden, indem Sie eingeben , um zu speichern und zu beenden (wie :x) oder ZQeinfach zu beenden (wie :q!). (Beachten Sie, dass der Fall hier wichtig ist ZZund zznicht dasselbe bedeutet.)

Vim verfügt über eine umfassende Hilfe, auf die Sie mit dem :helpBefehl zugreifen können. Dort finden Sie Antworten auf alle Ihre Fragen und ein Tutorial für Anfänger.

Dirvine
quelle
15
Es sei denn, Sie haben esc neu zugeordnet oder haben eine seltsame Zuordnung in Ihrer .vimrc, dann sollte es definitiv. Wenn Sie unter Linux xev eingeben und sicherstellen, dass Escape der Schlüsseltyp ist, den Sie erhalten, wenn Sie Escape drücken.
Dirvine
17
Denken Sie daran, dass Sie Strg + C verwenden können, wenn Sie Esc nicht verwenden können (wie ich, weil sich meine Shell in TotalTerminal befindet). vim.wikia.com/wiki/Avoid_the_escape_key
dotnetCarpenter
25
:x== ZZaber :x! = :wq. :xDatei :wqschreiben Wenn sich die Datei geändert hat, schreibe die Datei immer (egal dh bei der Verwendung inotify).
Hauleth
36
Um ehrlich zu sein, fällt es mir schwerer, das Hilfesystem von vim zu verwenden als vim selbst, und ich verlasse mich hauptsächlich auf schnelle Referenzkarten und Online-Dokumentation.
Bgvaughan
18
Wenn Sie keine Berechtigungen für die Datei haben, aber :w ! sudo tee %
Sudo-
190

Bilder sind tausend Unix-Befehle und -Optionen wert:

Geben Sie hier die Bildbeschreibung ein

Ich ziehe dies jedes Semester zu meinen Studenten und sie scheinen danach vi zu begreifen.

vi ist eine endliche Zustandsmaschine mit nur drei Zuständen.

Beim Start wechselt vi in ​​den BEFEHLSMODUS, in dem Sie blind kurze Befehle mit wenigen Zeichen eingeben können . Sie wissen, was Sie tun; Das ist nichts für Amateure.

Wenn Sie Text tatsächlich bearbeiten möchten, sollten Sie mit einem einstelligen Befehl in den INSERT-Modus wechseln:

  • i: Gehen Sie zu INSERT anstelle des Cursors
  • I: Wechseln Sie am Anfang der Zeile in den INSERT-Modus
  • a: Nach dem Cursor anhängen
  • A: Am Ende der Zeile anhängen
  • o: Öffnen Sie eine neue Zeile unterhalb der aktuellen Zeile
  • O: Öffnen Sie eine neue Zeile anstelle der aktuellen Zeile

Beantworten Sie nun die Frage: Verlassen.

Sie können vi aus dem EX-Modus beenden:

  • F: Wenn Sie keine Änderungen vorgenommen oder diese zuvor gespeichert haben
  • q!: ignoriert alle Änderungen und beendet
  • wq: speichern und beenden
  • x: das ist gleich wq

wund xakzeptieren Sie einen Dateinamenparameter. Wenn Sie vi mit einem Dateinamen gestartet haben, müssen Sie ihn hier nicht erneut angeben.

Endlich das Wichtigste: Wie können Sie den EX-Modus erreichen?

Der EX-Modus ist für lange Befehle vorgesehen, die Sie in der unteren Zeile des Bildschirms eingeben können. Im BEFEHLSMODUS drücken Sie den Doppelpunkt, :und in der unteren Zeile wird ein Doppelpunkt angezeigt , in den Sie die obigen Befehle eingeben können.

Im INSERT-Modus müssen Sie ESC drücken, dh die Escape-Taste, um in den COMMAND-Modus zu wechseln, und dann: um in den EX-Modus zu wechseln.

Wenn Sie sich nicht sicher sind, drücken Sie ESC und Sie gelangen in den Befehlsmodus.

Die robuste Methode ist also ESC -: - x-Enter, mit der Ihre Datei gespeichert und beendet wird.

Gergely
quelle
5
Danke, das Bild ist sehr hilfreich. Für mich wändert sich jedoch nicht von Ex in den Befehlsmodus, sondern Esc. Was mache ich falsch?
Nick Volynkin
2
Wenn Sie w-Enter schreiben, wird Ihre Datei gespeichert und der COMMAND-Modus wiederhergestellt. Ich habe es geschrieben, um ein vollständiges Bild der Befehle zum Speichern und Beenden zu erhalten.
Gergely
3
Oh, du meinst also :w. Dann macht es vollkommen Sinn. Gibt es übrigens einen Befehl zum erneuten Laden von der Festplatte (dh zum Zurücksetzen von Änderungen, aber nicht zum Schließen der Datei)? Wenn ja, könnte es neben wim Diagramm sein.
Nick Volynkin
2
@Gergely Ich habe gerade die Verwirrung herausgefunden! In den Dokumenten wird der normale Modus auch als Befehlsmodus bezeichnet ! Also, Befehlsmodus! = Befehlszeilenmodus. Beeindruckend!
Jpaugh
2
@NickVolynkin der Befehl zum Neuladen von der Festplatte ist :e(oder wahrscheinlicher, :e!da er Sie vor nicht gespeicherten Änderungen ohne die warnt !)
JDS
177

Bevor Sie einen Befehl eingeben, drücken Sie die EscTaste . Nachdem Sie es eingegeben haben, drücken Sie Returnzur Bestätigung die Taste.

Escbeendet den aktuellen Befehl und schaltet Vim in den normalen Modus . Wenn Sie jetzt drücken :, :wird das am unteren Bildschirmrand angezeigt. Dies bestätigt, dass Sie tatsächlich einen Befehl eingeben und die Datei nicht bearbeiten.

Die meisten Befehle haben Abkürzungen, wobei der optionale Teil in Klammern steht : c[ommand].

Mit '*' gekennzeichnete Befehle sind nur Vim (in Vi nicht implementiert).

Sicheres Beenden (schlägt fehl, wenn nicht gespeicherte Änderungen vorliegen):

  • :q[uit] Beenden Sie das aktuelle Fenster . Beenden Sie Vim, wenn dies das letzte Fenster ist. Dies schlägt fehl, wenn Änderungen im aktuellen Puffer vorgenommen wurden .
  • :qa[ll]* Beenden Sie alle Fenster und Vim, es sei denn, es wurden einige Puffer geändert.

Eingabeaufforderung beenden (Aufforderung, wenn nicht gespeicherte Änderungen vorliegen)

  • :conf[irm] q[uit]* Beenden Sie, aber geben Sie eine Eingabeaufforderung, wenn einige Puffer geändert wurden.
  • :conf[irm] xa[ll]* Schreiben Sie alle geänderten Puffer und beenden Sie Vim. Rufen Sie eine Eingabeaufforderung auf, wenn einige Puffer nicht geschrieben werden können.

Änderungen schreiben (speichern) und beenden:

  • :wqSchreiben Sie die aktuelle Datei (auch wenn sie nicht geändert wurde) und beenden Sie sie. Das Schreiben schlägt fehl, wenn die Datei schreibgeschützt ist oder der Puffer keinen Namen hat. :wqa[ll]* für alle Fenster.
  • :wq!Das gleiche, schreibt aber auch schreibgeschützte Dateien. :wqa[ll]!* für alle Fenster.
  • :x[it], ZZ(mit Details ). Schreiben Sie die Datei nur, wenn sie geändert wurde, und beenden Sie :xa[ll]* für alle Fenster.

Änderungen verwerfen und beenden:

  • :q[uit]! ZQ* Beenden Sie ohne zu schreiben, auch wenn sichtbare Puffer Änderungen aufweisen. Wird nicht beendet, wenn ausgeblendete Puffer geändert wurden.
  • :qa[ll]!*, :quita[ll][!]* Beende Vim, alle Änderungen an den Puffern (einschließlich versteckter) gehen verloren.

Drücken Sie Return, um den Befehl zu bestätigen.

Diese Antwort bezieht sich nicht auf alle Vim-Schreib- und Beendigungsbefehle und -argumente. In der Tat wird auf sie in der Vim-Dokumentation verwiesen .

Vim verfügt über eine umfangreiche integrierte Hilfe. Geben Sie diese ein Esc:helpReturn, um sie zu öffnen.

Diese Antwort wurde von der anderen inspiriert , die ursprünglich von @dirvine verfasst und von anderen SO-Benutzern bearbeitet wurde. Ich habe weitere Informationen aus Vim-Referenzen, SO-Kommentaren und einigen anderen Quellen hinzugefügt. Unterschiede für Vi und Vim spiegeln sich ebenfalls wider.

Nick Volynkin
quelle
81

Wenn Sie beenden möchten, ohne in Vim zu speichern, und Vim einen Exit-Code ungleich Null zurückgeben möchte , können Sie diesen verwenden :cq.

Ich benutze dies die ganze Zeit, weil ich nicht die Mühe habe, mich für eine kleine Schicht zu bewegen !. Ich leite oft Dinge an Vim weiter, die nicht in einer Datei gespeichert werden müssen. Wir haben auch einen ungeraden SVN-Wrapper in Arbeit, der mit einem Wert ungleich Null beendet werden muss, um ein Einchecken abzubrechen.

Sue Spence
quelle
19
Ich benutze dies auch, um ein Git Commit oder Visudo oder Crontab abzubrechen.
Josh Lee
Das Abbrechen eines Git-Commits mit :q!funktioniert einwandfrei, da Git nach einer nicht leeren Nachricht und nicht nach einem Exit-Code ungleich Null sucht.
Moopet
Ich weiß, dass es funktioniert, es ist nur so: cq benötigt keine Umschalttaste. :-)
Sue Spence
47

Dies ist für den schlimmsten Fall, dass Sie Vim beenden, wenn Sie nur aussteigen möchten, keine Ahnung haben, was Sie getan haben, und es Ihnen egal ist, was mit den von Ihnen geöffneten Dateien geschehen wird.

Ctrl-cEnterEnterviEnterCtrl-\Ctrl-n:qa!Enter

Dies sollte Sie die meiste Zeit rausholen.

Einige interessante Fälle, in denen Sie so etwas brauchen:

  • iCtrl-ovg (Sie wechseln in den Einfügemodus, dann in den visuellen Modus und dann in den ausstehenden Bedienermodus.)

  • QappendEnter

  • iCtrl-ogQCtrl-r=Ctrl-k (danke an porges für diesen Fall)

  • :set insertmode(Dies ist ein Fall, wenn Ctrl-\Ctrl-nSie zum normalen Modus zurückkehren.)


Bearbeiten: Diese Antwort wurde aufgrund der oben genannten Fälle korrigiert. Ich war:

EscEscEsc:qa!Enter

Dies funktioniert jedoch nicht, wenn Sie in den Ex-Modus gewechselt sind. In diesem Fall müssten Sie Folgendes tun:

viEnter:qa!Enter

Also ein vollständiger Befehl für "Ich möchte nicht wissen, was ich getan habe und ich möchte nichts speichern, ich möchte nur jetzt raus!" wäre

viEnterEscEscEsc:qa!Eingeben

Heikki Naski
quelle
6
@cavalcade Dies ist eine äußerst allgemeine Methode, um sicherzustellen, dass sich der Editor im normalen Modus befindet und dann sicher beendet wird. Im normalen Gebrauch brauchen Sie nur :qoder:wq
Dan Passaro
6
Nicht allgemein genug! Was ist, wenn ich (ein Anfänger) tippe i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>?
porges
@porges danke für den Testfall! Es gibt auch einige andere Testfälle, die beweisen, dass die ursprüngliche Methode bedauerlich war. Ich habe die Antwort jetzt allgemeiner bearbeitet.
Heikki Naski
@ HeikkiNaski zumindest für mich muss ich auch nach Strg-C
eingeben
40

Wenn Sie Vim im einfachen Modus beenden müssen (während Sie die -yOption verwenden), können Sie durch Drücken von Ctrl+ in den normalen Vim-Modus wechseln. LAnschließend funktioniert jede der normalen Optionen zum Beenden.

wsams
quelle
7
Noch eine Option: Sie können Ctrl+Oden INSERT-Modus vorübergehend verlassen und dann aufrufen :q. Ein Trick mit dieser Kombination ist auch in normalem vim nützlich, um einen einzelnen Befehl auszuführen und zum INSERT-Modus zurückzukehren.
Andrey Starodubtsev
28

Vim verfügt über drei Betriebsmodi: Eingabemodus, Befehlsmodus und Ex-Modus.

Eingabemodus - alles, was Sie eingeben, alle Tastenanschläge werden auf dem Bildschirm wiedergegeben.

Befehlsmodus oder Escape-Modus - Alles, was Sie in diesem Modus eingeben, wird als Befehl interpretiert.

Ex-Modus - Dies ist ein weiterer Editor, z. Es ist ein Zeileneditor. Es funktioniert pro Zeile oder basierend auf einer Reihe von Zeilen. In diesem Modus wird :am unteren Bildschirmrand ein angezeigt. Dies ist der Ex-Editor.

Um Vim zu beenden, können Sie beenden, während Sie sich entweder im Ex-Modus oder im Befehlsmodus befinden. Sie können Vim nicht beenden, wenn Sie sich im Eingabemodus befinden.

Verlassen des Ex-Modus

  1. Sie müssen sicher sein, dass Sie sich im Befehlsmodus befinden. Drücken Sie dazu einfach die EscTaste.

  2. Wechseln Sie in den Ex-Modus, indem Sie die :Taste drücken

  3. Verwenden Sie zum Beenden eine der folgenden Kombinationen im Ex-Modus:

    :q- Beenden :q!- Beenden ohne Speichern :wq- Speichern & Beenden oder Schreiben & Beenden :wq!- wie bei wq, aber Schreiben erzwingen, falls die Dateiberechtigungen schreibgeschützt sind :x- Schreiben & Beenden :qa- Alle beenden. nützlich, wenn mehrere Dateien geöffnet werden wie:vim abc.txt xyz.txt

Beenden des Befehlsmodus

  1. Drücken Sie die Escape-Taste. Sie haben dies wahrscheinlich bereits getan, wenn Sie sich im Befehlsmodus befinden.

  2. Drücken Sie die Hauptstadt ZZ ( shift zz) - Speichern und beenden

  3. Drücken Sie die Großbuchstabe ZQ ( shift zq) - Beenden ohne Speichern.

tovishalck
quelle
3
Was Sie als "Ex-Modus" bezeichnen, wird als Befehlszeilenmodus bezeichnet . Sie können damit ex-Befehle eingeben, jedoch mit einigen wichtigen Unterschieden .
Jpaugh
1
Hmm nein. Sie vergessen den visuellen Modus.
Pryftan
26

Nach dem Drücken ESC(oder cmd+ Cauf meinem Computer) müssen Sie drücken, :damit die Eingabeaufforderung angezeigt wird. Dann können Sie eingeben quit.

Möglicherweise können Sie auf dem Computer nicht beenden, da Ihre Informationen nicht gespeichert wurden. Wenn Sie trotzdem beenden möchten, geben Sie !direkt nach dem Beenden ein (dh :quit!).

Lösch mich
quelle
19

Ich habe Vim durch die Installation eines Git-Clients unter Windows erhalten. :qwürde Vim nicht für mich verlassen. :exittat jedoch ...

Bjørn van Dommelen
quelle
1
Ähnlich funktionierte dies für vim, der Git auf einem Macintosh macht.
Joel
1
@ Joel hat dies gerade auf meinem Mac überprüft, beide Befehle sind legitim ( vim -version7.3).
Nick Volynkin
2
Für Git Bashunter Windows, in Vimmanchmal ESCnicht funktioniert. Verwenden Sie stattdessen CTRL+ [.
Val
@Val Das kommt mir seltsam bekannt vor. Das liegt daran, dass die beiden dasselbe tun. Wie in ^[ist das gleiche wie ESC. Das ist interessant, dass Windows es komplizierter macht. Und amüsant.
Pryftan
10

Die Frage wurde hier gestellt .

Der qBefehl mit einer Nummer schließt die angegebene Aufteilung an dieser Position.

:q<split position>oder :<split position>qschließt den Split in dieser Position.

Angenommen, Ihr Vim-Fensterlayout sieht wie folgt aus:

-------------------------------------------------
|               |               |               |
-------------------------------------------------
|               |               |               |
|               |               |               |
|    Split 1    |    Split 2    |     Split 3   |
|               |               |               |
-------------------------------------------------

Wenn Sie den q1Befehl ausführen , wird die erste Teilung geschlossen.q2schließt den zweiten Split und umgekehrt.

Die Reihenfolge der geteilten Position im Befehl quit spielt keine Rolle. :2qoder :q2schließt den zweiten Split.

Wenn die Teilungsposition, die Sie an den Befehl übergeben, größer ist als die Anzahl der aktuellen Teilungen, wird einfach die letzte Teilung geschlossen.

Wenn Sie beispielsweise q100das Setup im obigen Fenster ausführen, in dem nur drei Teilungen vorhanden sind, wird die letzte Teilung geschlossen (Teilung 3).

Subash
quelle