A maneira mais simples de fazer isso é provavelmente com arquivos de sessão, que são scripts do vim (que o vim pode produzir automaticamente para você) que restauram um ambiente de edição anterior.
Você pode criar um novo arquivo de sessão usando :mksession <filename>
. Você pode restaurar essa sessão executando o script de sessão gerado :source <filename>
,.
Assim, você pode salvar a sessão atual antes de maximizar uma janela e restaurá-la quando desejar "desmaximizar" a janela.
Usando isso, você pode remapear os comandos de janelas apropriados para salvar uma sessão com antecedência e adicionar um novo mapeamento para que um "desfaça" o último comando de janelas restaurando a sessão. Por exemplo:
nnoremap <C-w>o :mksession! ~/session.vim<CR>:wincmd o<CR>
e assim por diante para todos os comandos de janelas que você deseja suportar (veja :help CTRL-W
, há muito). Os !
evita erros relativos ao sobrescrever um arquivo de sessão existente.
nnoremap <C-w>u :source ~/session.vim<CR>
para "desfazer" o último comando de janelas.
Se você quiser ser particularmente robusto, poderá estender isso via funções para salvar os arquivos de sessão em uma pilha e removê-los para obter uma cadeia completa de desfazer, embora nesse momento seja provavelmente mais eficiente escrever várias funções para rastrear o histórico de comandos da janela na memória ... nesse ponto você provavelmente está duplicando os plugins que já fazem esse tipo de coisa.