Quittez vim plus rapidement

124

J'utilise principalement Vim pour les modifications rapides plutôt que pour les longues sessions de travail. En ce sens, je trouve la séquence du clavier pour arrêter particulièrement laborieuse: Esc, Shift+ ;, w, q, Enter.

Comment quitter Vim (éventuellement en sauvegardant le document) avec le moins de frappe possible? Surtout du mode insertion.

vemv
la source
50
Le bouton d'alimentation est à un clic, vous savez.
Renan
2
@jasonwryan a raison - ZZ est assez rapide si vous êtes en mode commande, mais la comparaison n'est pas tout à fait correcte. Votre séquence de touches suppose que vous êtes en insertion mod. Pour sortir du mode insertion, Ctrl- [est plus rapide que Esc. Shift-: est une frappe - vous ne pouvez pas taper: plus vite tout seul. Donc, vous en économisez, mais pas beaucoup.
Dominic Cronin
2
Vous ne devez pas utiliser Escpour sortir du mode insertion, car la Esctouche est loin des autres touches des claviers modernes. Utilisez Ctrl+ ]ou créez votre propre mapping.
indicateur de vide
3
Obtenez un clavier français - vous pouvez éliminer le décalage.
Rich
1
void-pointeur, Ctrl + C ne fonctionne-t-il pas à la place de Ctrl + [au lieu de Esc?
zumalifeguard

Réponses:

154

Shiftzz en mode commande enregistre le fichier et se ferme.

jasonwryan
la source
4
Est-ce que cela nécessite absolument Shift ou est-ce simplement Z Z(majuscule)? Aussi, n'avez-vous pas besoin d'être en mode commande pour que cela fonctionne, ce qui le ferait Esc Z Z?
un CVn
35
En outre, ESC Z Qpour quitter sans enregistrer
Carlos Campderrós
Strg + zz est tout simplement faux. Il enverra le processus vim à l'arrière
hek2mgl
2
@ MichaelKjörling: La ZZ doit simplement être en majuscule.
LarsH
2
Cela ne ferme qu'un fichier cependant. J'ai beaucoup d'onglets ouverts, il faudrait donc des tonnes de Z.
Philip
41

ZZen mode normal enregistre le fichier en cours en cas de modification et quitte ou ferme la fenêtre en cours / onglet (comme , :xmais pas :wqqui écrit le fichier même si elle n'a pas été modifié).

Pour quitter sans condition après avoir écrit tous les fichiers modifiés dans toutes les fenêtres, les onglets et les tampons masqués, vous avez besoin :xa(il ne sera toujours pas fermé si certains fichiers ne peuvent pas être écrits pour une raison ou une autre)

Pour quitter inconditionnellement sans rien changer: ZQ(identique à :q!).

Stéphane Chazelas
la source
1
Je pense que vous voulez dire en mode normal. Le "mode de commande" pourrait facilement être confondu avec le mode de ligne de commande
David Brown
@DavidBrown, command modeest le nom traditionnel, mais je conviens que normal modec'est moins ambigu. J'ai modifié la réponse.
Stéphane Chazelas
33

:x est une clé de moins que :wq

Tomasz Myrta
la source
11
Pas aussi bien que Shift + Z Zsi!
CodeMedic
@ CodeMedic C'est de loin le plus rapide si vous avez nno : ;et nno ; :, cependant. (plus vno la même chose). J'étais dubitatif à propos de l'échange, mais vous n'y retournerez jamais. :nno ,: :silent! unmap :<CR>:silent! unmap ;<CR>et :nno ,; :nno ; :<CR>:nno : ;<CR>:vno ; :<CR>:vno : ;<CR>soutenir le impair yap@"et tel.
Jthill
20

Créez un mappage personnalisé pour les tâches fréquemment utilisées. Si vous quittez souvent vim, créez un mapping avec quelques touches, par exemple:

nnoremap <leader><leader> :xa<cr>

Si l'option <leader>est définie sur virgule, vous let mapleader = ","devez rapidement utiliser vim virgule pour quitter vim et enregistrer vos modifications. Si vous souhaitez enregistrer un trait de touche supplémentaire lorsque vous êtes en mode insertion, créez également un mappage correspondant en mode insertion:

inoremap <leader><leader> <esc>:xa<cr>

Mais méfiez-vous, cela pourrait accidentellement être vim quand vous frappez le <leaderdouble.

Marco
la source
1
Merci pour une réponse complète, cela m’encourage à en apprendre davantage sur vim (ce que j’ai tendance à éviter)!
vendredi
4
@vemv, vous devriez travailler dans l'autre sens - chaque fois que vous devez faire la même chose plusieurs fois, voyez s'il existe un moyen d'arrêter cela!
Wayne Werner
17

Utilisez ceci pour faire la magie. Deux frappes seulement!

Ctrl+ spour sauver,

ctrl+ dpour sauvegarder et quitter,

ctrl+ qpour quitter les modifications ignorées.

1er Mettez ceci à votre ~ / .bashrc

bind -r '\C-s'
stty -ixon

2ème. Placez ceci dans votre ~ / .vimrc

inoremap <C-s> <esc>:w<cr>                 " save files
nnoremap <C-s> :w<cr>
inoremap <C-d> <esc>:wq!<cr>               " save and exit
nnoremap <C-d> :wq!<cr>
inoremap <C-q> <esc>:qa!<cr>               " quit discarding changes
nnoremap <C-q> :qa!<cr>

3ème. Redémarrez vim et obtenez des jours plus productifs!

Brain90
la source
2
Pourquoi utiliser CTRL + D / CTRL + Q pour enregistrer + sortie, et pas seulement ZZ, et ZQ?
Evan Carroll
Bonjour Evan, ctrl + d / ctrl + q nécessite seulement deux frappes au clavier, tandis que ZZ et ZQ nécessitent trois frappes au clavier. décalage + z + z / décalage + q + q. Une clé de sauvegarde est importante si nous le faisons fréquemment. De plus, nous avons évoqué ctrl + s comme raccourci d’enregistrement, je pense que c’est plus intuitif que ZZ ou ZQ.
Brain90
4
J'ai toujours considéré que ZQ était dangereux. Vous pouvez avoir l’intention d’appuyer sur ZQ pour ne pas enregistrer, mais si vous appuyez accidentellement sur Z deux fois, vous êtes parti et avez sauvegardé votre fichier sans le vouloir.
Keith Devens
1
Si vous êtes sur un Mac, utilisez ~ / .bash_profile. Et rappelez-vous de le rechercher.
Snowcrash
16

Pourquoi pas juste Qpour 'Quitter'?

Cela ne nécessite qu'une frappe de touche décalée (ie Shiftet Q). C'est aussi une combinaison de touches que je frappe rarement par accident.

Par défaut, vim mappe Q vers switch to "Ex" mode. Si vous trouvez le mode "Ex" aussi inutile (ou gênant) que moi, vous ne manquerez pas sa fonction par défaut.

Voici ce que j'ai dans mon .vimrcdossier:

" allow quit via single keypress (Q)
map Q :qa<CR>

Si vous avez des tampons non enregistrés, il vous sera demandé avant de quitter.

Lambart
la source
en quelque sorte dans mon VIM Q était déjà mappé sur :qpar défaut. Merci pour le conseil.
user13107
7

Voici un aide-mémoire pour VIM

Cheat-sheet-for-VIM

To quit the vi editor without saving any changes you've made:

If you are currently in insert or append mode, press Esc. 

Press  :  (colon). The cursor should reappear at the lower left corner of the screen beside a colon prompt. 

Enter the following:
  q!
This will quit the editor, and all changes you have made to the document will be lost.

Un peu plus ::

Fermeture et enregistrement de fichiers

When you edit a file in vi, you are actually editing a copy of the file rather than the original. The following sections describe methods you might use when closing a file, quitting vi, or both.
Quitting and Saving a File

The command ZZ (notice that it is in uppercase) will allow you to quit vi and save the edits made to a file. You will then return to a Unix prompt. Note that you can also use the following commands:

:w  to save your file but not quit vi (this is good to do periodically in
    case of machine crash!).
:q  to quit if you haven't made any edits.
:wq to quit and save edits (basically the same as ZZ).
Quitting without Saving Edits

Sometimes, when you create a mess (when you first start using vi this is easy to do!) you may wish to erase all edits made to the file and either start over or quit. To do this, you can choose from the following two commands:

:e! reads the original file back in so that you can start over.
:q! wipes out all edits and allows you to exit from vi.
vkulkarni
la source
Les 2 derniers doivent ajouter "depuis la dernière sauvegarde du fichier" ... c'est "évident" mais un débutant peut comprendre "super, c'est depuis que j'ai ouvert vi", et découvrir que non, s'ils ont été enregistrés pendant la session, ": q! " ne récupérera pas du tout le fichier original, ni ": e!". Il ne fera que supprimer les modifications intervenues depuis la dernière ouverture ou sauvegarde du fichier (quelle que soit la dernière).
Olivier Dulac
3

Ma solution simple et pratique pour quitter et économiser de vim - est la suivante:

Ctrl+ Xraccourci.

Ajoutons ce code dans le .vimrcfichier:

"Fast quit and save from normal and insert mode
:map <C-X> <ESC>:x<CR>
:imap <C-X> <ESC>:x<CR>
Skywinder
la source
1
<C-Q>Bien , mais pourquoi n'est pas mappable?
friederbluemle
2

Essayer

nno : ;
nno ; :
vno : ;
vno ; :

Si vous utilisez fFtT, cela vous demandera un peu de temps pour vous y habituer, mais maintenant, cesser de fumer ne sert qu'à ;xenregistrer si nécessaire, ;qpour ne pas enregistrer. De plus, tout le reste va plus vite aussi.

je vais
la source