Qual é a melhor estratégia para blocos de código e macros no vim?
Pergunta
À medida que desenvolvo mais com o vim, sinto vontade de copiar blocos de código útil, semelhantes aos "modelos" do Eclipse.
Eu estava pensando em criar um arquivo separado para cada pedaço de código e apenas lê-los com
:r code-fornext
mas isso parece meio primitivo.Pesquisando no Google, encontro macros vim mencionadas e algo sobre "mapas", mas nada que pareça simples.
O que estou procurando é, por exemplo.algo como os "Modelos" do Eclipse, então coloco um pedaço de código com o cursor no meio dele.Ou as "Macros" do JEdit, que posso gravar fazendo exclusões complicadas e renomeando em uma linha, depois posso reproduzi-las novamente em outras 10 linhas, para que faça o mesmo com elas.
O vim tem algo parecido com essas duas funcionalidades?
Solução
Para gravar macros no Vim, no modo de comando, pressione o botão q
tecla e outra tecla à qual você deseja atribuir a macro.Para macros de descarte rápido, geralmente apenas clico qq
e atribua a macro ao q
chave.Quando estiver no modo de gravação, execute as teclas digitadas.Quando terminar, certifique-se de estar de volta ao modo de comando e pressione q
novamente para interromper a gravação.Então, para reproduzir a macro manualmente, você pode digitar @q
.Para reproduzir a macro executada anteriormente, você pode digitar @@
ou para executá-lo 10 vezes você pode digitar 10@q
ou 20@q
, etc.
Resumindo:
+----------------------------------+-------------------------------------+
| start recording a macro | qX (X = key to assign macro to) |
+----------------------------------+-------------------------------------+
| stop recording a macro | q |
+----------------------------------+-------------------------------------+
| playback macro | @X (X = key macro was assigned to) |
+----------------------------------+-------------------------------------+
| replay previously played macro | @@ |
+----------------------------------+-------------------------------------+
Em relação aos pedaços de código, encontrei e comecei a usar um plug-in do Vim chamado snipMate, que imita o recurso de snippets do TextMate.Você pode obter o plug-in aqui:
http://www.vim.org/scripts/script.php?script_id=2540
E um pequeno artigo sobre como usar o snipMate (junto com um breve screencast mostrando-o em uso):
http://www.catonmat.net/blog/vim-plugins-snipmate-vim/
Espero que você ache isto útil!
Outras dicas
No vim.wikia, você encontrará um categoria de dicas dedicado à expansão de trechos e abreviações.Você também verá uma lista de plug-ins que facilitam a definição de trechos/arquivos de modelos complexos.
HTH,