《Vim實用技巧(第2版)》——1.2 不要自我重複
本節書摘來自異步社區《Vim實用技巧(第2版)》一書中的第1章,第1.2節,作者:【英】Drew Neil(尼爾)著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看
1.2 不要自我重複
對於在行尾添加內容這樣的常見操作,如添加分號,Vim提供了一個專門的命令,可以把兩步操作合並為一步。
假設有如下的JavaScript程序片段。
the_vim_way/2_foo_bar.js
var foo = 1
var bar = 'a'
var foobar = foo + bar
我們想在每行的結尾添加一個分號。要實現這一點,先得把光標移到行尾,然後切換到插入模式進行修改。$
命令可以完成移動動作,接著就可以執行 a;<Esc>
完成修改了。
要完成全部修改,也可以對下麵兩行做完全相同的操作,不過那樣做會錯過這裏將要提到的小竅門。由於 . 命令可以重複上次的修改,因此不必重複之前的操作,而是執行兩次 j$.。一個鍵(.)頂3個(a;<Esc>
),雖然每次省得並不多,不過在重複操作時,累積效應可不小。
不過讓我們再仔細審視一下這個操作模式:j$.
。j
命令使光標下移一行,而 $
命令把光標移到行尾。我們用了兩下按鍵,僅僅是為了把光標移到指定位置,以便可以用 . 命令。你覺得還有改進的餘地嗎?
減少無關的移動a
命令在當前光標之後添加內容,A
命令則在當前行的結尾添加內容。不管光標當前處於什麼位置,輸入A
都會進入插入模式,並把光標移到行尾。換句話說,它把$a
封裝成了一個按鍵操作。在本技巧後的一箭雙雕部分中,我們將會看到Vim提供了不少這樣的複合命令。
下麵是對之前例子的改進。
用 A 來代替 $a,大大提升了 . 命令的效率。不必再把光標移到行尾,隻需保證它位於該行內就行了(可在任意位置)。現在可以重複執行足夠多次的 j. ,完成對後續行的修改。
一鍵移動,另一鍵操作,真是太完美了!請留意這種應用模式,因為我們即將在更多的例子中看到它的身影。
雖然這一模式對這個簡短的例子來說很好用,但它不是萬能的。試想一下,如果我們不得不給連續50行添加分號,即便每個修改輸一次 j. ,看起來也是一項很繁重的工作。跳到技巧30可以看到另外一種解決方法。
一箭雙雕
我們可以這樣說,A 命令把兩個動作($a)合並成了一次按鍵。不過它不是唯一一個這樣的命令,很多Vim的單鍵命令都可以被看成兩個或多個其他命令的組合。下表列出了類似的一些例子,你能找出它們之間別的共同點嗎?
如果你發覺自己正在輸入 ko(或更糟糕,在用 k$a),馬上打住!想想你在幹什麼,然後你就會意識到可以把它換成O 命令。
你找出這些命令別的共同點了嗎?它們全都會從普通模式切換到插入模式。仔細想想這一點,並想想這對 . 命令可能產生怎樣的影響。
最後更新:2017-06-06 07:38:11