vimでやを使って数値をインクリメントする時に陥りがちな罠
いや罠でもなんでもないんですが、私が勝手に罠に引っかかっただけのでメモ。
カーソルの下または後の数をインクリメントしたい場合には、
001
を
002
になりますが、
007
を
010
になります。察しの早い方はもうお分かりだと思いますが、0で始まる数値は8進数としてvimが認識してくれて次の数値である「010」にしてくれるているんですね。DBとかデータファイルでは0埋めで「0001」連番を振る場合がよくあるありますし、10進数で扱いたい!。私は8進数表記はあまり使いません・・・(バイナリアンとは遠い存在だなぁ)
設定くらいあるだろと思って、ヘルプったらありました。
:h nrformats
ヘルプから引用です。
'nrformats' 'nf' 文字列 (既定では "octal,hex") バッファについてローカル {Vi にはない} テキスト内の数をコマンド CTRL-A や CTRL-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進数として扱ってくれます。
すっきりした。