tags:

views:

339

answers:

2

As I develop more with vim, I find myself wanting to copy in blocks of useful code, similar to "templates" in Eclipse.

I was thinking of making a separate file for each code chunk and just reading them in with

:r code-fornext

but that just seems kind of primitive. Googling around I find vim macros mentioned and something about "maps" but nothing that seems straightforward.

What I am looking for are e.g. something like Eclipse's "Templates" so I pop in a code chunk with the cursor sitting in the middle of it. Or JEdit's "Macros" which I can record doing complicated deletes and renaming on one line, then I can play it again on 10 other lines so it does the same to them.

Does vim have anything like these two functionalities?

+3  A: 

To record macros in Vim, in the command mode, hit the 'q' key and another key you want to assign the macro to. For quick throw away macros I usually just hit 'qq' and assign the macro to the 'q' key. Once you are in recording mode, run through your key strokes. When you are done make sure you are back in command mode and hit 'q' again to stop recording. Then to replay the macro manually, you can type '@q'. To replay the previously run macro you can type '@@' or to run it 10 times you could type '10@q' or '20@q', etc..

In summary:

+----------------------------------+-------------------------------------+
| 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   | @@                                  |
+----------------------------------+-------------------------------------+

In regards to code chunks, I have found and started using a Vim plug-in called snipMate, which mimics TextMate's snippets feature. You can get the plug-in here:

http://www.vim.org/scripts/script.php?script_id=2540

And a short article on using snipMate (along with a short screencast showing it in use):

http://www.catonmat.net/blog/vim-plugins-snipmate-vim/

Hope you find this helpful!

brian newman
@@ only seems to work for version 7, but I can call it with @q in version 6, VERY useful, thanks!
Edward Tanguay
A: 

On vim.wikia, you will find a category of tips dedicated to snippets and abbreviations expansion. You will also see a list of plugins that ease the definition of complex snippets/templates-files.

HTH,

Luc Hermitte