Comment quitter l'éditeur Vim?

3771

Je suis coincé et ne peux pas m'échapper. Ça dit:

"type :quit<Enter> to quit VIM"

Mais quand je tape cela, cela apparaît simplement dans le corps de l'objet.

jclancy
la source
131
Essayez-vous simplement de quitter VIM? Si tel est le cas, appuyez sur "échapper" puis tapez ': q'
Pop
47
N'oubliez pas les deux points ! Vous devez taper :quitpuis appuyer sur la [ENTER]touche.
Farahmand
88
Il est vraiment facile d'apprendre les bases de vim, et il est intégré à votre système. Dans le terminal, tapez "vimtutor". 25 minutes plus tard, vous irez plus vite que votre éditeur de texte habituel!
Mark Robson
4
Vérifiez ici plus de commandes.
Toni
78
Pour éviter de git commitvous envoyer à vim à l'avenir: git config --global core.editor="nano"
Tom Kelly

Réponses:

4909

Appuyez sur la Esctouche pour entrer en "mode normal". Ensuite, vous pouvez taper :pour entrer en "mode de ligne de commande". Un deux-points ( :) apparaîtra en bas de l'écran et vous pouvez taper l'une des commandes suivantes. Pour exécuter une commande, appuyez sur la Entertouche.

  • :q quitter (abréviation de :quit)
  • :q!quitter sans enregistrer (abréviation de :quit!)
  • :wq écrire et quitter
  • :wq! pour écrire et quitter même si le fichier n'a qu'une autorisation de lecture (si le fichier n'a pas l'autorisation d'écriture: forcer l'écriture)
  • :x écrire et quitter (similaire à :wq, mais n'écrire que s'il y a des changements)
  • :exitécrire et quitter (idem :x)
  • :qapour tout quitter (court pour :quitall)
  • :cq pour quitter sans enregistrer et faire en sorte que Vim renvoie une erreur non nulle (c'est-à-dire quitter avec erreur)

Vous pouvez également quitter Vim directement du "Mode normal" en tapant ZZpour enregistrer et quitter (identique à :x) ou ZQpour simplement quitter (identique à :q!). (Notez que le cas est important ici. ZZEt zzne signifie pas la même chose.)

Vim a une aide complète - à laquelle vous pouvez accéder avec la :helpcommande - où vous pouvez trouver des réponses à toutes vos questions et un tutoriel pour les débutants.

dirvine
la source
15
À moins que vous n'ayez remappé esc ou que vous ayez un mappage étrange dans votre .vimrc, cela devrait certainement. Si sous linux, tapez xev et assurez-vous que escape est le type de clé que vous obtenez lorsque vous appuyez sur escape.
dirvine
17
N'oubliez pas que vous pouvez utiliser ctrl + c si vous ne pouvez pas utiliser Esc (comme moi parce que mon shell est dans TotalTerminal). vim.wikia.com/wiki/Avoid_the_escape_key
dotnetCarpenter
25
:x== ZZmais :x! = :wq. :xécrire un fichier si le fichier a changé, :wqécrire toujours le fichier (c'est-à-dire lors de l'utilisation inotify).
Hauleth
36
Pour être honnête, j'ai plus de mal à utiliser le système d'aide de vim qu'à utiliser vim lui-même, et je me fie principalement aux cartes de référence rapides et à la documentation en ligne.
bgvaughan
18
si vous n'avez pas d'autorisations sur le fichier mais avez des autorisations sudo:w ! sudo tee %
tvlooy
191

Les images valent mille commandes et options Unix:

Entrez la description de l'image ici

Je dessine ceci à mes étudiants chaque semestre et ils semblent saisir vi par la suite.

vi est une machine à états finis avec seulement trois états.

Au démarrage, vi passe en mode COMMANDE, où vous pouvez taper à l' aveugle de courtes commandes de caractères . Tu sais ce que tu fais; ce n'est pas pour les amateurs.

Lorsque vous souhaitez réellement modifier le texte, vous devez passer en mode INSERT avec une commande à un caractère:

  • i: aller à INSÉRER à la place du curseur
  • I: passer en mode INSERT au début de la ligne
  • a: ajouter après le curseur
  • A: ajouter à la fin de la ligne
  • o: ouvrir une nouvelle ligne sous la ligne actuelle
  • O: ouvrir une nouvelle ligne à la place de la ligne actuelle

Maintenant, répondant à la question: quitter.

Vous pouvez quitter vi du mode EX:

  • q: si vous n'avez pas apporté de modifications ou les avez enregistrées au préalable
  • q!: ignore toutes les modifications et quitte
  • wq: enregistrer et quitter
  • x: c'est égal à wq

wet xacceptez un paramètre de nom de fichier. Si vous avez démarré vi avec un nom de fichier, vous n'avez pas besoin de le donner ici à nouveau.

Enfin, le plus important: comment accéder au mode EX?

Le mode EX est pour les commandes longues que vous pouvez voir taper en bas de l'écran. À partir du mode COMMAND, vous appuyez sur deux-points, :et un deux-points apparaîtra sur la ligne du bas, où vous pourrez taper les commandes ci-dessus.

Depuis le mode INSERT, vous devez appuyer sur ESC, c'est-à-dire le bouton Échap, pour passer en mode COMMAND, puis: pour passer en mode EX.

Si vous n'êtes pas sûr, appuyez sur ESC et cela vous amènera en mode commande.

Ainsi, la méthode robuste est ESC -: - x-Enter qui enregistre votre fichier et quitte.

Gergely
la source
5
Merci, l'image est très utile. Cependant, pour moi, wne passe pas du mode Ex au mode Command, mais le Escfait. Qu'est-ce que je fais mal?
Nick Volynkin
2
Si vous écrivez w-Enter qui enregistre votre fichier et revient en mode COMMANDE. Je l'ai écrit pour avoir une image complète des commandes save & quit.
Gergely
3
oh, tu veux dire :w. Cela prend alors tout son sens. Soit dit en passant, existe-t-il une commande pour recharger à partir du disque (c'est-à-dire pour annuler les modifications mais pas pour fermer le fichier)? Si c'est le cas, cela pourrait être à côté wdu diagramme.
Nick Volynkin
2
@Gergely, je viens de comprendre la confusion! Depuis la documentation, le mode normal est aussi appelé mode commande ! Donc, mode commande! = Mode ligne de commande. Hou la la!
jpaugh
2
@NickVolynkin la commande pour recharger à partir du disque est :e(ou plus probablement :e!car elle vous avertira des changements non enregistrés sans le !)
JDS
177

Avant d'entrer une commande, appuyez sur la Esctouche . Après l'avoir entré, appuyez sur Returnpour confirmer.

Esctermine la commande en cours et fait passer Vim en mode normal . Maintenant, si vous appuyez sur :, le :apparaîtra en bas de l'écran. Cela confirme que vous tapez réellement une commande et ne modifiez pas le fichier.

La plupart des commandes ont des abréviations, avec une partie en option entre crochets: c[ommand].

Les commandes marquées d'un '*' sont uniquement Vim (non implémentées dans Vi).

Arrêt sécurisé (échoue en cas de modifications non enregistrées):

  • :q[uit] Quittez la fenêtre actuelle . Quittez Vim s'il s'agit de la dernière fenêtre. Cela échoue lorsque des modifications ont été apportées au tampon actuel .
  • :qa[ll]* Quittez toutes les fenêtres et Vim, sauf si certains tampons ont été modifiés.

Invite-quitter (invite s'il y a des modifications non enregistrées)

  • :conf[irm] q[uit]* Quittez, mais donnez une invite lorsqu'il y a des tampons qui ont été modifiés.
  • :conf[irm] xa[ll]* Écrivez tous les tampons modifiés et quittez Vim. Affichez une invite lorsque certains tampons ne peuvent pas être écrits.

Écrivez (enregistrez) les modifications et quittez:

  • :wqÉcrivez le fichier actuel (même s'il n'a pas été modifié) et quittez. L'écriture échoue lorsque le fichier est en lecture seule ou que le tampon n'a pas de nom. :wqa[ll]* pour toutes les fenêtres.
  • :wq!La même chose, mais écrit même des fichiers en lecture seule. :wqa[ll]!* pour toutes les fenêtres.
  • :x[it], ZZ(avec détails ). N'écrivez le fichier que s'il a été modifié et quittez :xa[ll]* pour toutes les fenêtres.

Ignorer les modifications et quitter:

  • :q[uit]! ZQ* Quittez sans écrire, également lorsque les tampons visibles ont changé. Ne se ferme pas lorsqu'il y a des tampons cachés modifiés.
  • :qa[ll]!*, :quita[ll][!]* Quittez Vim, toutes les modifications apportées aux tampons (y compris cachés) sont perdues.

Appuyez sur Returnpour confirmer la commande.

Cette réponse ne fait pas référence à toutes les commandes et tous les arguments d'écriture et de sortie de Vim. En effet, ils sont référencés dans la documentation Vim .

Vim dispose d'une aide intégrée complète, tapez Esc:helpReturnpour l'ouvrir.

Cette réponse a été inspirée par l' autre , rédigée à l'origine par @dirvine et éditée par d'autres utilisateurs SO. J'ai inclus plus d'informations à partir de la référence Vim, des commentaires SO et d'autres sources. Les différences pour Vi et Vim sont également reflétées.

Nick Volynkin
la source
81

Si vous souhaitez quitter sans enregistrer dans Vim et que Vim renvoie un code de sortie différent de zéro, vous pouvez utiliser :cq.

Je l'utilise tout le temps parce que je ne peux pas être dérangé par le changement de petit doigt !. Je redirige souvent des choses vers Vim qui n'ont pas besoin d'être enregistrées dans un fichier. Nous avons également un wrapper SVN impair au travail qui doit être quitté avec une valeur non nulle afin d'interrompre une consignation.

Sue Spence
la source
19
Je l'utilise également pour abandonner un git commit, ou visudo, ou crontab,…
Josh Lee
L'abandon d'une validation git avec :q!fonctionne très bien, car git vérifie un message non vide et non un code de sortie non nul.
moopet
Je sais que cela fonctionne, c'est juste que: cq ne nécessite pas la touche Maj. :-)
Sue Spence
47

C'est pour le pire des cas de sortie de Vim si vous voulez juste sortir, vous n'avez aucune idée de ce que vous avez fait et vous ne vous souciez pas de ce qui va arriver aux fichiers que vous avez ouverts.

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

Cela devrait vous faire sortir la plupart du temps.

Quelques cas intéressants où vous avez besoin de quelque chose comme ça:

  • iCtrl-ovg (vous entrez en mode insertion, puis en mode visuel puis en mode opérateur en attente)

  • QappendEnter

  • iCtrl-ogQCtrl-r=Ctrl-k (merci aux porges pour ce cas)

  • :set insertmode(c'est un cas où Ctrl-\Ctrl-nvous retourne en mode normal)


Edit: Cette réponse a été corrigée en raison des cas ci-dessus. Auparavant, c'était:

EscEscEsc:qa!Enter

Cependant, cela ne fonctionne pas si vous êtes entré en mode Ex. Dans ce cas, vous devrez faire:

viEnter:qa!Enter

Donc, une commande complète pour "Je ne veux pas savoir ce que j'ai fait et je ne veux rien enregistrer, je veux juste sortir maintenant!" serait

viEnterEscEscEsc:qa!Entrer

Heikki Naski
la source
6
@cavalcade Il s'agit d'une méthode extrêmement générale permettant de s'assurer que l'éditeur est en mode normal, puis de quitter en toute sécurité. En utilisation normale, tout ce dont vous avez besoin est :qou:wq
Dan Passaro
6
Pas assez général! Et si j'ai (un débutant) tapé i<Ctrl-O>gQ<Ctrl-R>=<Ctrl-K>?
porges
@porges merci pour le cas de test! Il existe également d'autres cas de test qui prouvent que la méthode d'origine était lamentable. J'ai édité la réponse pour être plus générale maintenant.
Heikki Naski
@HeikkiNaski au moins pour moi, j'ai aussi besoin d'entrer après Ctrl-C (pour échapper au registre d'expression)
porges
40

Dans le cas où vous devez quitter Vim en mode facile (tout en utilisant l' -yoption), vous pouvez entrer en mode Vim normal en appuyant sur Ctrl+ L, puis l'une des options de sortie normales fonctionnera.

wsams
la source
7
Encore une autre option: vous pouvez utiliser Ctrl+Opour quitter temporairement le mode INSERT puis entrer :q. Trick avec cette combinaison est également utile dans vim normal pour exécuter une seule commande et revenir en mode INSERT.
Andrey Starodubtsev
28

Vim a trois modes de fonctionnement: mode d'entrée, mode de commande et mode Ex.

Mode d'entrée - tout ce que vous tapez, toutes les frappes sont répercutées à l'écran.

Mode commande ou mode d'échappement - tout ce que vous tapez dans ce mode est interprété comme une commande.

Mode Ex - c'est un autre éditeur, ex. Il s'agit d'un éditeur de ligne. Il fonctionne par ligne ou basé sur une gamme de lignes. Dans ce mode, un :apparaît en bas de l'écran. Ceci est l'ancien éditeur.

Pour quitter Vim, vous pouvez quitter lorsque vous êtes en mode ex ou en mode commande. Vous ne pouvez pas quitter Vim lorsque vous êtes en mode d'entrée.

Quitter le mode ex

  1. Vous devez vous assurer que vous êtes en mode Commande. Pour ce faire, appuyez simplement sur la Esctouche.

  2. Passez en mode ex en appuyant sur la :touche

  3. Utilisez l'une des combinaisons suivantes en mode ex pour quitter:

    :q- quitter :q!- quitter sans enregistrer :wq- enregistrer et quitter ou écrire et quitter :wq!- comme wq, mais forcer l'écriture au cas où les autorisations de fichier sont en lecture seule :x- écrire et quitter :qa- tout quitter. utile lorsque plusieurs fichiers sont ouverts comme:vim abc.txt xyz.txt

Quitter le mode commande

  1. Appuyez sur la touche d'échappement. Vous l'avez probablement déjà fait si vous êtes en mode commande.

  2. Appuyez sur le capital ZZ ( shift zz) - enregistrer et quitter

  3. Appuyez sur ZQ majuscule ( shift zq) - quittez sans sauvegarder.

tovishalck
la source
3
Ce que vous appelez "ex mode" est en fait appelé mode ligne de commande . Il vous permet d'entrer des commandes ex, mais avec quelques différences importantes .
jpaugh
1
Hmm non. Vous oubliez le mode visuel.
Pryftan
26

Après avoir appuyé ESC(ou cmd+ Csur mon ordinateur), vous devez appuyer sur :pour que l'invite de commande apparaisse. Ensuite, vous pouvez entrer quit.

Vous pouvez constater que la machine ne vous permettra pas de quitter car vos informations n'ont pas été enregistrées. Si vous souhaitez quand même quitter, entrez !directement après la fin (c. :quit!-à-d.).

supprime moi
la source
19

J'ai obtenu Vim en installant un client Git sur Windows. :qne voulait pas quitter Vim pour moi. :exita cependant ...

Bjørn van Dommelen
la source
1
De même pour vim faisant git sur un macintosh cela a fonctionné.
Joel
1
@Joel vient de vérifier cela sur mon mac, les deux commandes sont légitimes ( vim -version7.3).
Nick Volynkin
2
Pour Git Bashles fenêtres, Vimparfois ESCne fonctionne pas. utilisez CTRL+ à la [place.
Val
@Val Cela semble étrangement familier. Iirc c'est parce que les deux font la même chose. Comme dans ^[est identique à ESC. C'est intéressant que Windows le rende plus compliqué. Et amusant.
Pryftan
10

La question a été posée ici .

La qcommande avec un nombre ferme la division donnée dans cette position.

:q<split position>ou :<split position>qfermera la scission dans cette position.

Disons que la disposition de votre fenêtre Vim est la suivante:

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

Si vous exécutez la q1commande, elle fermera le premier fractionnement. q2fermera la deuxième division et vice versa.

L'ordre de répartition des positions dans la commande quit n'a pas d'importance. :2qou :q2fermera la deuxième division.

Si la position de division que vous passez à la commande est supérieure au nombre de divisions actuelles, elle fermera simplement la dernière division.

Par exemple, si vous exécutez la q100configuration de la fenêtre ci-dessus où il n'y a que trois divisions, elle fermera la dernière division (Split 3).

Subash
la source