Vim反模式

cpplover發表於2012-02-22

原文連結

無論你是在寫程式碼,寫詩歌或者寫散文,掌握Vim對你的編輯速度和流暢性都有巨大的提高。但是因為文字編輯器的學習曲線非常陡峭,因此在你初學文字編輯器的時候,你會養成一些壞的習慣。因為Vim讓你快速流暢的編輯,它很難讓你根除這些習慣,因為你可能甚至沒有注意到他們,但是你確實值得去克服他們。這裡我列出一些常見的壞習慣。

一次移動一行

如果你需要移動好幾行,通過按下【j】或者【k】一次移動一行是非常低效的。在Vim中有許多上下移動的方法。我找了兩種最有效的:按段落移動和按螢幕移動,他們依賴於你需要移動多遠,需要多精確的移動。

{ — Move to start of previous paragraph or code block.
} — Move to end of next paragraph or code block.
Ctrl+F — Move forward one screenful.
Ctrl+B — Move backward one screenful.

如果你正好需要精確的知道要去哪裡,那麼通過查詢導航是一種很好的方式(用/向前查詢,用?向後查詢)。

跳回你原來的地方也是很有用的技術,我們可以動過【``】(數字1旁邊的按鍵)實現,或者可以用【gi】返回上一次插入文字的地方。如果你喜歡,你甚至可以使用【g;】和【g,】在修改位置列表裡前後移動。

一次移動一個字元 相似的,使用【h】和【l】一次移動一個字元通常是一種浪費,當我們有【t】和【f】時:

t<char> — Move forward until the next occurrence of the character.
f<char> — Move forward over the next occurrence of the character.
T<char> — Move backward until the previous occurrence of the character.
F<char> — Move backward over the previous occurrence of the character.

使用【w】, 【W】, 【b】, 【B】, 【e】, and 【E】按照單詞移動也更好。同樣,通過查詢來導航也是很好的,還有不要忘記,你可以對於查詢結果進行復制,產出或者修改:

y/search<Enter>
y?search<Enter>
d/search<Enter>
d?search<Enter>
c/search<Enter>
c?search<Enter>

用游標進行單詞查詢

不要再為輸入,複製/貼上單詞費心了;只要使用【*】或【#】。當你充分使用這個技術時,你會發現它是如此的快捷。

刪除然後插入

Deleting text with intent to replace it by entering insert mode immediately afterward isn’t necessary: 刪除一段文字,然後立刻轉入插入模式。不需要這樣做:

d2wi

使用【c】會更快更簡潔地編輯:

c2w

這個操作有個附加的好處就是它讓整個操作變得可以重複(使用【.】進行重複)

使用方向鍵

在插入和普通模式中,Vim都允許你使用方向鍵進行移動,但是當你習慣了【hjkl】來進行移動,再使用方向鍵在文字中移動會讓你笨拙;在你集中注意力與Vim會話過程中,你應該讓你的手臂穩定在鍵盤的中央。同樣的,儘管【Home】鍵和【End】鍵在大多數文字編輯器裡功能相同,當我們也沒有任何特別理由去使用它們,因為我們有功能相近的【^】和【$】。

所以放棄方向鍵吧,通過使用一個簡單的權宜之計來完全禁止他們,至少暫時的禁止他們:

noremap <Up> <nop>
noremap <Down> <nop>
noremap <Left> <nop>
noremap <Right> <nop>

將你的手保持在鍵盤中間的好處不僅僅是為了加速;它讓你感覺更舒服,讓你可以在鍵盤前休息你的手腕而且也不會他們移動得太遠,同樣,對於一些人來說這樣避免了反覆某些動作形成的勞損。

移動到【Escape】

【Escape】鍵在現代鍵盤上離開中間有些遠,相對於Bill Joy設計vi時的鍵盤來說。按【Escape】通常是不必要的;【Ctrl+[】會更近些並且更舒服一些。相比你在新手時學著去按【Escape】而感到的笨拙,習慣使用這個組合按鍵不會需要太長時間。你可能同樣在考慮將別的十分不常用的按鍵(比如【Caps Lock】)對映成【Escape】,或者甚至對映一些非常規的按鍵組合,比如【jj】,來代替【Escape】。我覺得這或許有些極端,但是對於一些人來說這樣確實工作得很好:

inoremap jj <Esc>

移動到行首或者行尾然後插入

只需使用【I】和【A】即可(譯註:我通常使用$,^再加i,這樣確實省了不少功夫)。同樣,他們可以讓動作變得可以重複。

進去插入模式,然後開始新的一行 只需使用【o】和【O】即可在當前行的下面/上面增加新的一行,同時進入插入模式。

進入插入模式來刪除文字

刪除文字和插入模式是一個很明顯的矛盾。相反,你應該使用【d】來刪除文字。同樣,這個操作是可以重複的,它意味著你不需要一直按著【Backspace】不放。一般的,如果你在Vim一直按下某個鍵,這或許是一種更快的方法。

重複命令或者查詢

只需要輸入【@:】即可重複命令,或者使用【n】/【N】來重複查詢。如果它不是你最近使用過的命令或者查詢,但是它確實在你的命令歷史記錄裡,只需輸入【q:】或者【q/】,然後再列表中選擇你需要的重複命令。

重複替換

按下【&

重複巨集呼叫

按下【@@

以上只是一些編輯器常見的陷阱。想了解更多Vim技巧,歡迎查閱Vim Tips wiki

歡迎參加iTran樂譯4期~

相關文章