本節書摘來自異步社群《vim實用技巧(第2版)》一書中的第2章,第2.4節,作者:【英】drew neil(尼爾)著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
大多數普通模式指令可以在執行時指定次數,可以利用這個功能來做簡單的算術運算。
很多普通模式指令都可以帶一個次數字首,這樣vim就會嘗試把該指令執行指定的次數,而不是隻執行一次(參見 :h count

)。
<code><c-a></code> 和 <code><c-x></code>指令分别對數字執行加和減操作。在不帶次數執行時,它們會逐個加減,但如果帶一個次數字首,那麼可以用它們加減任意整數。例如,如果把光标移到字元5上,執行 10<code><c-a></code> 就會把它變成15。
但是如果光标不在數字上會發生什麼?文檔裡說, <code><c-a></code>指令會“把目前光标之上或之後的數值加上 [count]”(參見 :h ctrl-a

)。是以,如果光标不在數字上,那麼 <code><c-a></code> 指令将在目前行正向查找一個數字,如果找到了,它就徑直跳到那裡。我們可以利用這一點簡化操作。
下面是一段css片段。
normal_mode/sprite.css
我們要複制最後一行并且對其做兩個小改動,即用“news”替換單詞“blog”,以及把“0px”改為“-180px”。可以運作 yyp 來複制此行,然後用 cw 來修改第一個單詞。但該怎麼處理那個數值呢?
一種做法是用 f0 跳到此數字,然後進入插入模式手動修改它的值,即<code>i-18<esc></code>。不過,運作 <code>180<c-x></code> 則要快得多。由于光标不在要操作的數字上,是以該指令會正向跳到所找到的第一個數字上,進而省去了手動移光标的步驟。讓我們看看整個操作過程。
在本例中,隻複制了一行并做出改動。但是,假設要複制10份,并對後續數字依次減180。如果要切換到插入模式去修改每個數字,每次都得輸入不同的内容(-180,然後-360,以此類推)。但是如果用 <code>180<c-x></code> 指令的話,對後續行也可以采用相同的操作過程。甚至還可以把這組按鍵操作錄制成一個宏(參見第11章),然後根據需要執行多次。
數字的格式
007的後面是什麼?不,這不是詹姆斯·邦德的惡作劇,我是在問:如果對007加1,你覺得會得到什麼結果。
如果你的答案是008,那麼當你嘗試對任意以0開頭的數字使用<code><c-a></code> 指令時,也許會感到詫異。像在某些程式設計語言中的約定一樣,vim把以0開頭的數字解釋為八進制值,而不是十進制。在八進制體系中,007 + 001 = 010,看起來像是十進制中的10,但實際上它是八進制中的8,糊塗了嗎?
如果你經常使用八進制,vim的預設行為或許會适合你。如果不是這樣,那麼你可能想把下面這行加入你的vimrc裡:
<code>set nrformats=</code>
這會讓vim把所有數字都當成十進制,不管它們是不是以0開頭的。