vimtricks.wiki Concise Vim tricks, one at a time.

How do I execute buffer text as a macro dynamically?

Answer

:let @a=getline('.')<CR>@a

Explanation

How it works

Instead of recording keystrokes interactively, you can write a sequence of Vim commands as plain text in your buffer and then execute that text as a macro. This gives you the ability to compose, edit, and debug macros visually before running them.

The command :let @a=getline('.') reads the current line's text and stores it in register a. Then @a executes the register contents as a macro. This two-step process turns any line of text into an executable macro.

This technique is powerful because:

  • You can see exactly what keystrokes the macro will perform
  • You can edit the text freely using all of Vim's editing power before executing
  • You can store multiple macro definitions in a scratch file and execute them as needed
  • Special keys need to be represented as literal control characters (inserted with Ctrl-V followed by the key)

Example

Suppose you want a macro that deletes the first word on a line and moves down. Write this text on a line in your buffer:

0dwj

With the cursor on that line, run :let @a=getline('.')<CR> then @a to execute it. Or chain them: :let @a=getline('.') | normal @a<CR>.

For more complex sequences, you can build a longer string:

0f=dt;A // cleaned<Esc>j

Note that <Esc> as literal text will not work -- you need the actual Escape character. Insert it in your buffer with Ctrl-V Esc, which will appear as ^[. This approach is especially valuable when debugging complex macros since you can see and fix each keystroke.

Next

How do you yank a single word into a named register?