Gravando Sessões no Vim

Pense na cena: você está programando uma certa funcionalidade de um determinado projeto, vamos chamá-lo de A. Então, você tem 4 arquivos abertos em buffers dentro do Vim. Criou uns mapeamentos do teclado extra, só para o momento. Também tem marcadores que pulam de um trecho do código para outro. Está tudo do jeito que você adora.

Chega, então, o seu chefe e diz: "Cara, preciso que tu veja algo em outro projeto." ou até mesmo atualiza seu kernel e precisa rebootar o sistema. Chega sua namorada e pede pra ver o orkut. Seja qual seja o motivo, você precisa fechar o Vim. Mas, mais tarde, vai voltar a mexer, nestes 4 mesmos arquivos. Vai refazer todos os mapeamentos, refazer as marcações, etc.

Pois, se já aconteceu isso com você - comigo acontece muito frequênte -, você pode usar o :mksession.

A sintaxe é a seguinte:

:mksession ~/.vim-sessions/projeto-A.vim

Você escolhe o nome do arquivo e o diretório e o vim grava no arquivo as informações exatas do editor no momento em que foi executado o comando. Dentre as coisas das quais ele grava estão:

  1. Mapeamentos de teclas
  2. Variáveis globais (iniciadas com maiúsculas e que tenham pelo menos 1 caracter minúsculo)
  3. Caso use o GVim, grava o posicionamento e o tamanho dele na tela
  4. Todos os arquivos abertos em buffers e o ponteiro do mouse
  5. O estado visual do Gvim (folds, marks, incserch)

Depois de gravada, para recarregar a session, basta abrir o arquivo.

gvim -S ~/.vim-sessions/projeto-A.vim
ou
vim -S ~/.vim-sessions/projeto-A.vim

Eu tenho usado bastante para funcionalidades que requerem muita manutenção. Por exemplo, no desenvolvimento web.

vim -S ~/.vim-sessions/projetoA-javascripts.vim
vim -S ~/.vim-sessions/projetoA-accounts.vim

Assim, até o módulo de accounts ficar pronto, testado e aprovado pelo inmetro, todos os arquivos relacionados estão ali. E quando acaba o expediente, sobreescrevo a session, para que no próximo dia eu possa dar continuidade.

E você? Tem alguma idéia melhor? Comente!

Comentários

muito bacana teu blog...
adoro o (G)vim...

continua assim cara...

O gerenciador de sessões do VIM é de fato sensacional, já que salva todo o ambiente.

Para poupar-me certo tempo, eu uso o plugin http://www.vim.org/scripts/script.php?script_id=2010, é uma camada de 'abstração' para o gerenciador de sessões.

Os comandos que ganhamos são (quote do vim.org):

:SessionOpen -> command takes a session name as an argument. It supports argument completion.

:SessionOpenLast -> command opens the g:LAST_SESSION session (see above).

:SessionClose -> command wipes out all buffers, kills cscope and clears variables with session name.

:SessionSave -> command saves the current editing session. If v:this_session is empty it asks for a session name.

:SessionSaveAs -> command takes a session name as an optional argument. If there is no argument or it is empty, it asks for a session name (default is the last part of v:this_session).

:SessionShowLast -> command shows the content of the g:LAST_SESSION and v:this_session variables.

Espero que seja útil.