As of v1.66 it won't be necessary to use an extension at all for simple replacement (0, 1, 2, ... or 1, 2, 3, ...) like this. New snippet variables
$CURSOR_INDEX or ${CURSOR_INDEX}
$CURSOR_NUMBER or ${CURSOR_NUMBER}
are being added (they are in Insiders now). So your snippet could be as simple as (inserted here via a keybinding in keybindings.json
):
{
"key": "alt+i", // whatever keybinding you want
"command": "editor.action.insertSnippet",
"args": {
"snippet": "$CURSOR_NUMBER"
},
"when": "editorTextFocus && editorHasMultipleSelections" // if you want to restrict it
},

You can't do any real math on the added numbers other than increment from 0 or 1. To do more interesting math see below extension.
Using an extension that I wrote this is very easy: Find and Transform.
Create this keybinding (in your keybindings.json):
{
"key": "alt+y", // whatever keybinding you want
"command": "findInCurrentFile",
"args": {
// "find": "1", // actually not necessary
"replace": "${matchNumber}",
"matchCase": true // match only APPLE, not Apple
}
}
That will replace whatever word your cursor is on with the matchNumber
starting at 1. If you wanted to start at 0, use ${matchIndex}
.
If you need to specify a more complicated regex find, you can do that too.