読者です 読者をやめる 読者になる 読者になる

vimでやを使って数値をインクリメントする時に陥りがちな罠

vim

いや罠でもなんでもないんですが、私が勝手に罠に引っかかっただけのでメモ。

カーソルの下または後の数をインクリメントしたい場合には、で行う事ができますが、0埋めの数値をインクリメントする時に罠が待っています。

001

でインクリメントすると

002

になりますが、

007

でインクリメントすると

010

になります。察しの早い方はもうお分かりだと思いますが、0で始まる数値は8進数としてvimが認識してくれて次の数値である「010」にしてくれるているんですね。DBとかデータファイルでは0埋めで「0001」連番を振る場合がよくあるありますし、10進数で扱いたい!。私は8進数表記はあまり使いません・・・(バイナリアンとは遠い存在だなぁ)

設定くらいあるだろと思って、ヘルプったらありました。

:h nrformats

ヘルプから引用です。

'nrformats' 'nf'	文字列	(既定では "octal,hex")
			バッファについてローカル
			{Vi にはない}
	テキスト内の数をコマンド CTRL-ACTRL-X で増減させるとき、 Vimに何を
	数として認識させるかを設定する。これらのコマンドの詳しい情報については
	|CTRL-A| を参照。
	alpha	これが含まれると、単一のアルファベットも増減操作を受ける。これ
		は a), b) 等の、文字を使ったリストに対して便利である。
	octal	これが含まれると、0 で始まる数は8進数として認識される。例:
		"007"の上で CTRL-A を使うと "010" となる。
	hex	これが含まれると、"0x" や "0X" で始まる数は16進数として認識さ
		れる。例: "0x100" の上で CTRL-X を使うと "0x0ff" となる。
	1 から 9 の数字で始まる数は、常に10進数として認識される。8進数または16
	進数として認識されない数も10進数として認識される。

つまり、デフォルトでは8進と16進を認識するようになっていると。

すかさず、vimrcに1行追加!

set nf=""

これで、0埋めの文字も10進数として扱ってくれます。
すっきりした。