Annuler la fenêtre fractionnée dans Vim

231

J'ai divisé mes fenêtres horizontalement. Maintenant, comment puis-je revenir au mode normal, c'est-à-dire pas de fenêtre fractionnée juste une fenêtre sans annuler toutes mes fenêtres ouvertes. J'en ai 5 et je ne veux pas "quitter", je veux juste sortir de la fenêtre partagée.

Sudeep
la source
7
Avez-vous des chances d'accepter la réponse d'eckes? Il est beaucoup plus utile que celui actuellement accepté ...
Kyle Strand

Réponses:

288

Appuyez sur Control+ w, puis appuyez sur qpour fermer chaque fenêtre à la fois.

Mise à jour : Considérez également la réponse eckes qui peut être plus utile pour vous, impliquant :on (lire ci-dessous) si vous ne voulez pas le faire une fenêtre à la fois.

Warren P
la source
9
Je suis d'accord mais l'OP n'a pas choisi la réponse et je ne peux pas la changer moi-même.
Warren P
4
Je suis sûr que c'est la bonne réponse. Cela l'a fait pour moi et si vous regardez la question de l'op, il ne voulait pas fermer ses autres fenêtres ouvertes, juste celle récemment divisée.
Zak
1
N'aide pas si le tampon affiché contient des modifications non enregistrées. Il dit que je devrais passer outre! mais je ne sais pas comment. En tant que débutant, je suis perdu maintenant.
musiKk
2
alors enregistrez-le. Vous n'avez pas besoin de cette réponse si vous ne savez pas comment enregistrer. Il est possible que vous n'ayez même pas l'autorisation de sauvegarder.
Warren P
1
Issu des éditeurs GUI traditionnels, c'est un concept assez étrange. Le réglage hiddensemble cependant aider. Mais ce que je voulais dire, c'est comment ajouter un! à un raccourci? Est-ce "Cw! Q", "Cw q!", "! Cw q", "C-! W q"? Je pense que rien de tout cela mais j'ai déjà oublié comment créer de nouveaux tampons donc c'est un exercice pour le lecteur.
musiKk
265

Pour fermer toutes les divisions, je place généralement le curseur dans la fenêtre qui est le sur un, puis faire ly visible ce :onqui rend la fenêtre actuelle la sur la fenêtre ly visible. Nice mnémonique à retenir.


Edit: :help :on m'a montré que ces commandes sont les mêmes:

  • :on
  • :only
  • CTRL-w CTRL-o
  • Et oui, a également CTRL-W ole même effet (comme Nathan a répondu ).

Chacune de ces quatre ferme toutes les fenêtres sauf celle active.

eckes
la source
8
+1 Si l'autre fenêtre contient des modifications involontaires, :onrépondra par E445: Other window contains changeset ne fermera pas l'autre fenêtre. Par exemple, je crée généralement une nouvelle fenêtre et j'y lis un fichier dont j'aimerais extraire. Dans ce cas, Vim considère que l'autre fenêtre contient des modifications non écrites. Dans un tel cas, utilisez :on!pour forcer la fermeture.
Sabuncu
61

pour fermer toutes les fenêtres mais la fenêtre actuelle utilise:

CTRL+ w,o

Autrement dit, d'abord CTRL+ wet ensuite o.

Nathan Fellman
la source
3
Je me demande également s'il existe un moyen d'annuler CTRL+W oaccidentellement une saisie.
Paolo
30

Deux alternatives pour fermer la fenêtre en cours sont ZZet ZQ, qui, respectivement, enregistreront et non les modifications du tampon affiché.

Benoit
la source
10
C'est sûrement la "voie vim", crtl + wo semble si emacs.
Andy Hayden
Je n'aime pas Zparce que je suis allemand. (Spoiler: disposition du clavier si vous basculez fréquemment entre les paramètres DE / EN)
Tino
6

La commande: hide masquera la fenêtre actuellement focalisée. Je pense que c'est la fonctionnalité que vous recherchez.

Pour naviguer entre les fenêtres, tapez Ctrl + w suivi d'une touche de navigation (h, j, k, l ou touches fléchées)

Pour plus d'informations, exécutez :help windowet :help hidedans vim.

cledoux
la source
C'est bien. Chrome (avec le plugin ssh) intercepte <CW> comme "onglet de fermeture" désactivant efficacement toutes les commandes de la fenêtre <cw> de vim. Avoir une alternative est utile.
rêne
6

De :help opening-window(recherchez "Fermer une fenêtre" - /Closing a window)

  • :q[uit]ferme la fenêtre et le tampon actuels. Si c'est la dernière fenêtre, elle quittera également vim
  • :bd[elete] décharger le tampon courant et fermer la fenêtre courante
  • :qa[all]ou :quita[ll]fermera tous les tampons et fenêtres et quittera vim ( :qa!pour forcer sans enregistrer les modifications)
  • :clo[se]fermez la fenêtre actuelle mais gardez le tampon ouvert. S'il n'y a qu'une seule fenêtre, cette commande échoue
  • :hid[e]cacher le tampon dans la fenêtre courante (Lire la suite sur :help hidden)
  • :on[ly] fermez toutes les autres fenêtres mais laissez tous les tampons ouverts
chaptuck
la source
5

J'ai trouvé que ctrl+ wà la fenêtre que vous souhaitez fermer, puis faites-le :q. Cela fonctionne pour moi.

dmarges
la source
Il s'agit vraiment d'une réponse en double, du double de quelque chose qui est assis là depuis plus de 3 ans.
Warren P
@WarrenP ne ressemble pas à un dup. Je n'ai trouvé aucune autre réponse qui mentionne ^W^W:qune solution possible, alors débarrassez-vous d'une scission. Notez que ^W to the window you want to closecela implique apparemment plusieurs utilisations de ^W^Wpour basculer vers la fenêtre que vous souhaitez fermer ..
Tino
Ma faute. L'autre est ^ W puis o
Warren P
2

Je comprends bien votre intention, j'utilise exclusivement des tampons et je fais de temps en temps une division si nécessaire.

ci-dessous est un extrait de mon .vimrc

" disable macro, since not used in 90+% use cases
map q <Nop>
" q,  close/hide current window, or quit vim if no other window
nnoremap q :if winnr('$') > 1 \|hide\|else\|silent! exec 'q'\|endif<CR>
" qo, close all other window    -- 'o' stands for 'only'
nnoremap qo :only<CR>
set hidden
set timeout
set timeoutlen=200   " let vim wait less for your typing!

Qui correspond assez bien à mon flux de travail

Si a qété pressé

  • masquer la fenêtre actuelle si plusieurs fenêtres sont ouvertes, sinon essayez de quitter vim.

si a qoété pressé,

  • ferme toutes les autres fenêtres, aucun effet si une seule fenêtre.

Bien sûr, vous pouvez envelopper cette partie désordonnée dans une fonction , par exemple

func! Hide_cur_window_or_quit_vim()
    if winnr('$') > 1
        hide
    else
        silent! exec 'q'
    endif
endfunc
nnoremap q :call Hide_cur_window_or_quit_vim()<CR>

Sidenote : Je remap q, puisque je ne pas utiliser de macro pour l' édition, utilisez plutôt :s, :g, :vet commande de traitement de texte externe en cas de besoin, par exemple, :'{,'}!awk 'some_programm'ou l' utilisation :norm! normal-command-here.

qeatzy
la source
1

Tout comme les autres l'ont dit avant, la façon de procéder consiste à appuyer sur ctrl+ wpuis sur o. Cela "maximisera" la fenêtre actuelle, tout en fermant les autres. Si vous souhaitez pouvoir le "dé-maximiser", il existe un plugin appelé ZoomWin pour cela. Sinon, vous devrez recréer la configuration de la fenêtre à partir de zéro.

psyho
la source
0

D'accord, je viens de me détacher et de me reconnecter à la session d'écran et je suis de retour à l'écran normal que je voulais

Sudeep
la source
Cela ne quitte pas vimle mode de fenêtre fractionnée, cela laisse simplement screenle mode de volet divisé - qui peut être facilement confondu, alors peut-être que d'autres le font aussi. BTW Je trouve cette fonctionnalité d'écran ennuyeuse, par conséquent, je suis maintenant par défaut à tmuxce qui permet un rattachement avec toutes les divisions intactes.
Tino