Skip to main content

An introduction to Vim macros

Vim is my favourite text editor, because it is minimalist while also being insanely configurable. While I may describe my ideal Vim setup sometime in the future, I do want to share some tips and tricks that make Vim so damn efficient for certain tasks. Today, I shall focus on macros.

Here’s the key idea to keep in mind when discussing about Vim. Vim is not just an editor, it is a text manipulation program. Inserting text is just one of the many tasks that Vim can accomplish. A macro is a small Vim program that the user can record in order to make text editing more efficient.

Consider a simple use case. Let’s say that I have a CSV file that looks like this

New York,NY,USA
Seattle,WA,USA
Mumbai,MH,India

Let’s say that I want to add another column at the beginning of each line that is sequentially numbered, like so

1,New York,NY,USA
2,Seattle,WA,USA
3,Mumbai,MH,India

I could go down each line and manually add each column, but there’s a better way. The solution is to program a Vim macro that does the following tasks in order.

  1. Assuming that the first column of a certain line is the required number for this line (row), we copy the first column to the next line.

  2. Increment the line number by one so that it is one more than the previous line (row).

So, I edit the first line, in order to manually add the new column to the first line.

1,New York,NY,USA
Seattle,WA,USA
Mumbai,MH,India

Next, I ensure that I’m not executing any Vim command. I can verify this by pressing ESC a couple of times. Then I press q followed by a letter to identify this macro, e.g.: a. The macro then consists of the following keystrokes

  1. 0: Move to the beginning of the line.
  2. v: Visual mode.
  3. /,: Find the first , to match.
  4. y: Yank (copy) the highlighted text.
  5. j0: Go to the beginning of the next line.
  6. P: Paste the copied text. At this point, the cursor should be on the ,.
  7. h: Move the cursor one position to the left so that it is on the last digit of the number.
  8. Ctrla: Increment the number.
  9. q: Stop recording the macro.

Now, pressing @a would perform the nine steps outlined with just two key-presses. Let’s say the file had 50 more lines to be edited. In this case, I could use another powerful trick that Vim offers – the ability to repeat a command multiple times. So, ensure that I’m out of executing any command, I could type in a number followed by a command that would execute the specified command a certain number of times. So, pressing 50@a would execute the macro a fifty times, which is an insanely powerful technique for modifying multiple lines with a single command.

That’s all for Vim macros for today. I hope you found this post useful. Macros were one of the things I learnt relatively late as a Vim user, but now that I do know about this trick, I use it all the time, and it has saved me countless hours and a lot of headache when modifying code or text. Until the next time, when I take some time to write some more about cool Vim tricks and tips.

Comments

Popular posts from this blog

On Harry Potter and why I dislike the series

There could not be a better time for this post. There could not have been a worse time for this post. Now that the penultimate movie of the series is out, and my facebook wall filled with people who loved the movie. But this is something I really wanted to say, and I shall say it anyway. Harry Potter is pathetic literature. Now, you must be wondering why I say that. There are many reasons. Firstly, the storyline itself is flawed. When a writer sits down to write anything, he/she must set up some essential rules about what is happening. These rules must remain constant irrespective of how many times he/she changes his/her mind. This is so that the readers are allowed to have some sensibility in what they are reading. In the fourth book, Rowling goes ahead and kills Cedric. Then, at the end of the book, the horseless carriages are there again. Nothing special. We all knew that they are horseless. But then comes the fifth book, and BAM, the horses are actually winged beasts that only thos...

On the Dvorak Simplified Keyboard

This is a post that I have been meaning to write from quite some time. Long hours spent typing code on my computer left my hands fatigued, and left me with a lot of pain in my wrists and fingers. That is when I decided to use the Dvorak. But I have got the same bad habit as Dr. Watson, to tell a story backwards. Of course, you must be wondering what the Dvorak is. The story of keyboards starts with the invention of the typewriter. Christopher Sholes, the inventor of the typewriter, tried with a two row piano style keyboard. But then, he got into many difficulties with the design. Then he finally settled for a four row design. This was similar to the QWERTY layout that most computers and typewriters today possess. The engineers at Remington, to whom Sholes had presented his design modified the layout a little further, and then the QWERTY was born. As typewriters became popular, people got used to the layout, and started practising touch typing, i.e. typing without looking at the keys...

The paradox of government

I'm fascinated by the concept of government, and the paradoxes it presents. On one hand, governments grant us a certain set of rights or liberties. On the other hand, they work to strip us of the very liberties they promise. Now, I don't mean that all governments strip people of liberties, but there are liberal regimes, and there are sufficiently restrictive and dictatorial ones. Both models may have results to show, it does not mean that people in a restrictive regime are unhappy (refer to Dan Dennett's TED talk , where he states that ideas or memes can be dangerous when taken from one part of the world, where they are widespread, and, using the virus analogy, where people are immune to the memes; to a part of the world where they are foreign, where people may not be immune to the memes and where people may get infected). History has shown that people were sufficiently satisfied with autocratic governments with a benevolent dictator, and that people in other parts of the ...