Handling numbers in Vim when they have a dash in front of them
Over on the Fediverse, I mentioned a Vim situation I'd run into:
Here's a situation Vim's Ctrl-A feature for handily incrementing numbers doesn't readily handle: if you have machines called eg 'something-1' and want to make that 'something-2', 'something-3', and so on. Vim will interpret the '-1' bit as the number -1 and auto-increment it to 'something0'. There is probably a clever Vim way around this, or you can use another option.
(Then people in the replies gave me a number of clever Vim solutions.)
The situation where this came up was that I was writing some new DNS entries for a series of boring names, starting with:
machine-1 IN A 10.x.y.z
I wanted to copy and duplicate in order to make 'machine-2', 'machine-3', and so on entries, so I copied that first line and hit Ctrl-A to increment the machine number, which didn't work because Vim, by default, saw the '-1' as a negative number and duly incremented it to '0'. Visually selecting the number before using Ctrl-A isn't really a great solution for this particular case, because I want to do it repeatedly to create different numbers; at best I'd be repeatedly selecting shorter and shorter columns and incrementing them by one.
Jeff Forcier offered the best general solution for people
which is to tell Vim that I don't work with negative
numbers by adding '
unsigned to the '
nrformats' setting. I understand why
this isn't the default, but I sort of wish it was or at least that Vim
was more sophisticated about what it considered a negative number (so
that it required a free-standing '-', not one that text before it).
The obvious quick fix if you remember is switching to Ctrl-X to decrement the number. Related to this is that I could start at the end of the sequence instead of the start, so I'd start with, say, 'machine-5', duplicate it a bunch, and then use Ctrl-A to create machine-4, machine-3, and so on. Both of these rely on realizing that Vim is going to interpret the '-1' as a negative number, which is something that doesn't come up very often for me.
Having written this entry, I will hopefully remember the whole issue.
I'm not sure if I want to add '
set nrformats+=unsigned' to any .vimrc,
though, because that's a subtle trap in its own right. If I put it in,
I'll probably forget it, then someday I may actually be working with
negative numbers and get another surprise. The current surprise is at
least readily understandable.
Comments on this page:Written on 23 December 2022.