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:
- Mapeamentos de teclas
- Variáveis globais (iniciadas com maiúsculas e que tenham pelo menos 1 caracter minúsculo)
- Caso use o GVim, grava o posicionamento e o tamanho dele na tela
- Todos os arquivos abertos em buffers e o ponteiro do mouse
- 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.