Making An Incrementing List In Vim

Let's say you want to make a list item, copy it an arbitrary number of times, and increment some counter on it. For example:

<ul>
    <li>Item 1</li>
</ul>

Highlight the line with the <li>, use yy to copy the line, and 9p to paste it 9 times. This will leave you with:

<ul>
    <li>Item 1</li>
    <li>Item 1</li>
    <li>Item 1</li>
    <li>Item 1</li>
    <li>Item 1</li>
    <li>Item 1</li>
    <li>Item 1</li>
    <li>Item 1</li>
    <li>Item 1</li>
    <li>Item 1</li>
</ul>

Type f1 to jump to the 1, j to move to the second item, ctrl+p to do a block selection, and 8j to highlight the 2nd-10th 1s. Here's where the magic happens:

If you type g ctrl+a, you'll have incremented all of the numbers in only 12 keystrokes!

<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
    <li>Item 6</li>
    <li>Item 7</li>
    <li>Item 8</li>
    <li>Item 9</li>
    <li>Item 10</li>
</ul>

How It Works

You can increment any number in vim with ctrl+a (decrementing is done with ctrl+x). Why the g prefix? It supposedly stands for "global", but unlike most normal commands, there's no deep rationale behind its operation. It's just a wacky trick worth memorizing.

Note: This only works in vim 8+