閱讀94 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《Vim實用技巧(第2版)》——2.4 用次數做簡單的算術運算

本節書摘來自異步社區《Vim實用技巧(第2版)》一書中的第2章,第2.4節,作者:【英】Drew Neil(尼爾)著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看

2.4 用次數做簡單的算術運算

大多數普通模式命令可以在執行時指定次數,可以利用這個功能來做簡單的算術運算。
很多普通模式命令都可以帶一個次數前綴,這樣Vim就會嚐試把該命令執行指定的次數,而不是隻執行一次(參見 :h count screenshot)。

<C-a><C-x>命令分別對數字執行加和減操作。在不帶次數執行時,它們會逐個加減,但如果帶一個次數前綴,那麼可以用它們加減任意整數。例如,如果把光標移到字符5上,執行 10<C-a> 就會把它變成15。

但是如果光標不在數字上會發生什麼?文檔裏說, <C-a>命令會“把當前光標之上或之後的數值加上 [count]”(參見 :h ctrl-a screenshot)。因此,如果光標不在數字上,那麼 <C-a> 命令將在當前行正向查找一個數字,如果找到了,它就徑直跳到那裏。我們可以利用這一點簡化操作。

下麵是一段CSS片段。

normal_mode/sprite.css

.blog, .news { background-image: url(/sprite.png); }
.blog { background-position: 0px 0px }

我們要複製最後一行並且對其做兩個小改動,即用“news”替換單詞“blog”,以及把“0px”改為“-180px”。可以運行 yyp 來複製此行,然後用 cW 來修改第一個單詞。但該怎麼處理那個數值呢?

一種做法是用 f0 跳到此數字,然後進入插入模式手動修改它的值,即i-18<Esc>。不過,運行 180<C-x> 則要快得多。由於光標不在要操作的數字上,所以該命令會正向跳到所找到的第一個數字上,從而省去了手動移光標的步驟。讓我們看看整個操作過程。
screenshot
在本例中,隻複製了一行並做出改動。但是,假設要複製10份,並對後續數字依次減180。如果要切換到插入模式去修改每個數字,每次都得輸入不同的內容(-180,然後-360,以此類推)。但是如果用 180<C-x> 命令的話,對後續行也可以采用相同的操作過程。甚至還可以把這組按鍵操作錄製成一個宏(參見第11章),然後根據需要執行多次。

數字的格式

007的後麵是什麼?不,這不是詹姆斯·邦德的惡作劇,我是在問:如果對007加1,你覺得會得到什麼結果。

如果你的答案是008,那麼當你嚐試對任意以0開頭的數字使用<C-a> 命令時,也許會感到詫異。像在某些編程語言中的約定一樣,Vim把以0開頭的數字解釋為八進製值,而不是十進製。在八進製體係中,007 + 001 = 010,看起來像是十進製中的10,但實際上它是八進製中的8,煳塗了嗎?

如果你經常使用八進製,Vim的缺省行為或許會適合你。如果不是這樣,那麼你可能想把下麵這行加入你的vimrc裏:

set nrformats=
這會讓Vim把所有數字都當成十進製,不管它們是不是以0開頭的。

最後更新:2017-06-06 07:38:08

  上一篇:go  《Vim實用技巧(第2版)》——2.5 能夠重複,就別用次數
  下一篇:go  《Vim實用技巧(第2版)》——2.3 構造可重複的修改