Vimで数を増減するときに10進数として扱うには vimrc に set nrformats= を追加する

@kasumiiです。こんにちは。

Vimで数の増減をするときに CTRL-ACTRL-X を使いますが、0(ゼロ)ではじまる数字を増減しようとすると8進数と認識されてしまって都合が悪い場合があります。

数の増減時は10進数として扱ってもらう方法を調べたのでメモ。

たとえば、0708 にするために CTRL-A を押すと、010 になってしまってアレ?ってなる場合。

どうやら8進数として認識されちゃってるみたいなので、10進数としてカウントアップしてもらうように nrformats の設定を変更すればいいらしい。

:help nrformats してヘルプを見てみます。

This defines what bases Vim will consider for numbers when using the
CTRL-A and CTRL-X commands for adding to and subtracting from a number
respectively; see |CTRL-A| for more info on these commands.
alpha	If included, single alphabetical characters will be
	incremented or decremented.  This is useful for a list with a
	letter index a), b), etc.	  	*octal-nrformats*
octal	If included, numbers that start with a zero will be considered
	to be octal.  Example: Using CTRL-A on "007" results in "010".
hex	If included, numbers starting with "0x" or "0X" will be
	considered to be hexadecimal.  Example: Using CTRL-X on
	"0x100" results in "0x0ff".
Numbers which simply begin with a digit in the range 1-9 are always
considered decimal.  This also happens for numbers that are not
recognized as octal or hex.

nrformats は、デフォルトでは octal,hex になっているようです。

alpha(アルファベット)
octal(8進数)
hex(16進数)

手元にある「実践Vim 思考のスピードで編集しよう!」を見てみると、こんな風に書いてありました。

仕事に8進数がよく出てくるのなら、Vim のこのデフォルトの挙動はピッタリだ。そうでない人は、vimrc に以下のような行を追加したほうがよい。

set nrformats=

こうすると、0が前置されていようがいまいが、Vimはすべての数を10進数として扱うようになる。

ふむふむ。早速、vimrcに set nrformats= を追加してみたら、ちゃんと 07 の次が 08 に増加するようになりました!(∩´∀`)∩ワーイ

set nrformats=alpha でアルファベットの増減ができるってことをはじめて知りました。人によっては CTRL-ACTRL-X で前後のアルファベットにできるのは便利かもしれませんね。

まだまだ知らないことがたくさんあるので、もっとVimを使いこなせるようになりたいです……!

【書籍版】実践Vim 思考のスピードで編集しよう!
【Kindle版】実践Vim 思考のスピードで編集しよう!(アスキー書籍)

実践Vim 思考のスピードで編集しよう!