Prenons un cas avec plusieurs divisions dans une fenêtre. vim permet de "maximiser" rapidement la division actuelle pour occuper toute la fenêtre via <C-W>
o
.
Existe-t-il un moyen pour vim de "se souvenir" des divisions qui existaient avant et de revenir à cet état après l'exécution <C-W>
o
?
EDIT: Pour clarifier, je cherche un moyen de le faire sans utiliser de plugins tiers.
Réponses:
La façon la plus simple de le faire est probablement avec les fichiers de session, qui sont des scripts vim (que vim peut produire automatiquement pour vous) qui restaureront un environnement d'édition précédent.
Vous pouvez créer un nouveau fichier de session à l'aide de
:mksession <filename>
. Vous pouvez restaurer cette session en exécutant le script de session généré,:source <filename>
.Ainsi, vous pouvez enregistrer la session en cours avant de maximiser une fenêtre et la restaurer lorsque vous souhaitez "dé-maximiser" la fenêtre.
À l'aide de cela, vous pouvez remapper les commandes de fenêtrage appropriées pour enregistrer une session au préalable et ajouter un nouveau mappage pour une afin d'annuler la dernière commande de fenêtrage en restaurant la session. Par exemple:
nnoremap <C-w>o :mksession! ~/session.vim<CR>:wincmd o<CR>
et ainsi de suite pour toutes les commandes de fenêtrage que vous souhaitez prendre en charge (voyez:help CTRL-W
, il y en a beaucoup). Le!
empêche les erreurs liées à l'écrasement d'un fichier de session existant.nnoremap <C-w>u :source ~/session.vim<CR>
pour "annuler" la dernière commande de fenêtrage.Si vous vouliez être particulièrement robuste, vous pouvez l'étendre via des fonctions pour enregistrer les fichiers de session dans une pile et les supprimer pour obtenir une chaîne d'annulation complète, bien qu'à ce stade, il soit probablement plus efficace d'écrire un tas de fonctions pour suivre la historique des commandes de fenêtre en mémoire ... à quel point vous dupliquez probablement les plugins qui font déjà ce genre de chose.
la source
Une autre option pourrait être d'ouvrir votre fenêtre actuelle dans un nouvel onglet, puis de simplement fermer l'onglet lorsque vous avez terminé.
La commande
:split
(ou:sp
pour faire court), sans argument, a pour effet d'ouvrir un nouveau split avec le même tampon que le split courant. La:tab
commande peut exécuter de nombreuses commandes liées aux fenêtres, en les modifiant pour utiliser un onglet à la place. La combinaison de ces données donne:tab sp
, ce qui ouvrira un nouvel onglet avec le tampon actuel.Ensuite, vous pouvez fermer le nouvel onglet avec
:q
ou:tabclose
(:tabc
pour faire court).la source
J'utilise le plugin ZoomWin ( https://github.com/itspriddle/ZoomWin ) pour exactement ce scénario. En appuyant sur CtrlW- Oune deuxième fois restaure la disposition de votre fenêtre.
la source
Ce que vous décrivez ressemble exactement à la fonction qui s'appelle "zoom". Il y a déjà une excellente réponse sur SO qui le fait très bien.
EDIT: réponse explicite, copiée et collée depuis SO . Je mets l'extrait ci-dessous dans mon .vimrc, puis j'invoque
dans mon invite de commande vim.
la source
Ce message est ancien, la réponse acceptée ne concerne pas
terminal buffer
.La réponse acceptée sert
session
à faire l'affaire, maissession
ne peut pas restaurer complètementterminal buffer
:La réponse de Tommcdo fonctionne toujours,
<c-w>:tab split
fonctionne bienterminal buffer
. Il mérite une carte:la source