vim 入坑指南

桃翁發表於2018-03-20

個人站點:桃園

0. 前言

0.1 簡介

vim 被譽為『編輯器之神』,與之同時代的 emacs 被譽為『神之編輯器』。可以看得出 vim 在編輯器的地位是很高的,得益於 vim 的指法,敲起程式碼來如行雲流水。特別膜拜創始人創始出這麼方便的敲程式碼的指法,這篇文章就是來帶你入坑 vim 指法操作。

0.2 前端的我為什麼要學習 vim

在當今前端開發工具百花齊放的時代(VS Code、Sublime、Atom 以及 IDE Webstorm),我為什麼還要介紹 20 多年前開發的一個老古董呢?在這裡我想說的是出身雖然老,但是所帶來的價值並沒有減,一旦習慣了 vim 的指法之後,你會覺得不用 vim 操作寫程式碼會覺得很不習慣,甚至不知道怎麼操作。然而用在支援 vim 指法的編輯上寫程式碼你會覺得如行雲流水,如果再配個機械鍵盤,簡直是享受,特別符合極客的風格。

一旦學會了 vim 的指法,會讓你終身受益,至少在你敲程式碼的年代會收益,毫無誇張, 它會讓你擺脫煩人的,在敲程式碼的時候頻繁的移動滑鼠,這也是 vim 的設計理念之一 -- 脫離滑鼠。

0.3 文章適用讀者

本篇文章比較適合前端開發者,因為我也只是用 vim 在前端領域做過一些開發,其他領域我沒有發言權。

0.4 Q&A

Q:你推薦 vim 是要我們完全放棄以前的編輯器而投入 vim 的懷抱嗎?

A:當然不是。首先 vim 的學習成本還是很高的,因為他跟平時我們用的編輯器敲程式碼的方式根本不同,因為它是不用滑鼠的,純鍵盤操作。你想想如果你在你的 vs code 上不用滑鼠操作,你上下左右全靠方向鍵,那敲程式碼的速度得有多慢。而且初學者想把 vim 打造成一個自己的 IDE 還是很有難度的。所以我這裡推薦的是,不管是你的 vs code、sublime等,裝一個 vim 外掛。我在 vs code 上試過,很爽,只不過現在投身到 emacs 的懷抱了。

雖然我用 emacs 了,我還是會裝 vim 外掛(Evil)。如果有興趣,下次可以推薦一下 spacemacs 。

開題說了這麼多,就是想吸引一下大家,覺得 vim 的指法是值得去學習的,接下來進入正題。

1 助記符

vim 上的所有定義的快捷鍵都是有一定的意義的,在這裡我先把常用的一些列出來。

1.1 正規表示式相關

  • $ : 移動游標到行尾
  • ^ : 移動游標到當前行的第一個字母位置。

1.2 移動類(motion)

h(左)、l(右)、j(上)、k(下)、f(front)、b(back)、u(up)

1.3 操作類(operator)

d(delete)、i(insert)、a(append)、c(change)、y(copy)、p(paste)

1.4 一般的縮寫

w(word)、s(sentence)

2 理解 vim 中三種常用模式

vim 裡面有好幾種模式,但是因為我這裡介紹的是在目前的編輯器裡面裝 外掛,所以像命令模式這種用來儲存檔案、退出檔案的就不介紹了。

  1. Nomal mode(預設模式,因為使用該模式場景最多,所有定為預設模式)。
  2. Insert mode (插入模式--少用,用了它 vim 就成 「啞巴」了)。
  3. Visual mode(可視模式,取名叫游標模式或者選擇模式可能還比較好理解)

2.1 三種模式之間的轉換關係

圖片來源參考文章

3 教程篇

當我們記住上面的助記符之後,我們就可以像寫英文短語一樣操作了。

vim 快捷鍵語法:[operator][count][motion],例如 刪兩個單詞就是 d2w,operator 和 motion 我已經在前面給出來一些了。

3.1 移動游標

3.1.1 最基本的 h、j、k、l

最基本的上下左右移動(跟鍵盤上下左右的鍵盤效果相同,但是往往方向鍵在鍵盤的右下方,離主鍵盤區較遠,這個也相對比較有優勢):

  • h:游標向左移動
  • j:游標向下移動
  • k:游標向上移動
  • l:游標向右移動

移動屬於 motion,所以在前面加上「count」就可以移動多行了,比如向上移動 10 行,就可以 10k。往往編輯器會有行號,定位需要做個加減法,如果採用的是相對行號,用這個就比較方便。不懂相對行號的同學看下圖就懂了。

相對行號

3.1.2 快速移動

w:游標往前移動一個詞 b:游標向後移動一個詞 0:移動游標到當前行首 ^:移動游標到當前行的第一個字母位置(注意與 0 的區別) $:移動游標到行尾 fx:移動游標到當前行的下一個 x 處(x為任意字母) tx:和上面一個命令類似,移動到 x 的左邊一個位置 ):移動游標到下一個句子 ( :移動游標到上一個句子 {:移動游標到上一段 }:移動游標到下一段

3.1.3 快速定位

在剛才介紹了通過相對行號來進行移動到行的游標,還有采用絕對定位來移動的。那就是 gg。 語法: [num]gg

  • 2gg : 游標移動到第 2 行
  • gg: 游標移動到檔案首部
  • G:移動到檔案胃部
  • H:移動到螢幕上面
  • M:移動到螢幕中間
  • L:移動到螢幕下面

書籤功能:這個功能也是很方便,很少有編輯器有的功能,單獨列出來講,強烈推薦。

  • m:給當前行加入書籤,x 為任意字母(m 是 mark )
  • ` : 單引號加上剛才 m 之後的字母,就會調整到剛才標記的那一行

3.1.3 螢幕滾動

  • Ctrl + b:向上移動一屏(Foward首字母小寫)
  • Ctrl + f:向下移動一屏(Backward首字母小寫)
  • Ctrl + d:向下滾動半屏內容(Down首字母小寫)
  • Ctrl + u:向上滾動半屏內容(Up首字母小寫)

3.2 剪下、複製、貼上

  • d[n]w:剪下後面 n 個單詞的內容,dw 是剪下當前單詞
  • [n]dd:剪下n行的內容, dd 為剪下當前行
  • D:剪下游標後到行尾的內容
  • yy/Y:複製當前行的內容
  • p:貼上到游標後
  • P:貼上到游標前

在 normal 模式下是沒有刪除操作的,d 這種刪除也是剪下。

以上全是 normal 模式

3.3 編輯模式

在前面也說了,進入編輯模式也就變成了「啞巴」vim 了,就跟一般的編輯器沒什麼區別了。很多人就知道用 i 可以進入,還有很多命令可以讓你聰明的進入。

  • i:在游標處插入(insert首字母小寫)
  • I:在行首插入(insert首字母大寫)
  • a:在游標處後一個字元插入(append首字母小寫)
  • A:在行尾插入(append首字母大寫)
  • o:在上一行插入
  • O:在下一行插入
  • s:清除當前字元並進入插入模式
  • cc/S:清除當前行並進入插入模式
  • cw: 清除當前單詞並進入插入模式

3.4 可視模式

要是前面都學會了,可視模式就比較簡單了,而且你將會經常用到這個模式。我會把這個模式稱做「選擇模式」,接下來我們就來探索一下是如果選擇的。

其實也就兩個關鍵的點:v(字元選擇)、V(行選擇)

3.4.1 v(小寫 v)

在 normal 模式下,按一下 v,然後可以按 l,重複按 l,你會發現右邊的在一直被選中(高亮的部分)。同樣的操作,按了 v,然後再練習一下按 h、j、k。

選中的目的是什麼呢?就是為了進行一些編輯操作,比如刪除 d (實質是剪下)、複製 y。

小提示,常常選中之後用 c 也是比較好的選擇哦,剪下並進入插入模式。

3.4.2 V(大寫 V)

V 就是選中行,也很簡單。按了 V 之後,然後按 j、k,就可以上下選擇行了,然後一次性刪除 d、複製 y,就比較方便。

3.5 組合操作

這個功能就比較強悍了,很適用,強烈推薦。 先來記公式:operator + i|a + scope

operator 就是我們前面提到的插入(c)、剪下(d)、複製(y)以及選擇(v),i 表示 scope 範圍內,a 表示包含 scope 標籤,scope 就是操作的範圍了。

例項: 以下如果將 i 換成 a,則會將符號也包含進去

  • vib(選中小括號內的內容)
  • viB(選中大括號內的內容)
  • vi"(選中雙引號內的內容)
  • vi'(選中單引號內的內容)
  • vi<(選中尖括號內的內容)

3.6 撤回、查詢、替換

  • u: 撤回上次操作(效果跟 command + z 效果一樣)
  • /|?xxx:表示在整篇文件中搜尋匹配xxx的字串, / 表示向下查詢, ? 表示向上查詢.其中xxx可以是正規表示式。查詢到以後, 再輸入 n 查詢下一個匹配處, 輸入 N 反方向查詢.
  • :%s/original/replacement:檢索第一個 “original” 字串並將其替換成 “replacement”
  • :%s/original/replacement/g: 檢索並將所有的 “original” 替換為 “replacement”
  • :%s/original/replacement/gc:檢索出所有的 “original” 字串,但在替換成 “replacement” 前,先詢問是否替換

這些操作一般編輯器都自帶有很好的快捷鍵,記不住也沒啥。

4 結束語

我寫這篇文章的目的不是為了總結什麼知識點(其實當你 vim 用熟了,這些命令完全形成肌肉記憶了,根本不用記下來),或者說想發篇文章之類的,僅僅是想給 vim 做一個宣傳,讓更多的人接觸 vim,讓更多的開發者在開發上效率更高。如果你覺得這篇文章對你有幫助,請轉發給更多的人讓他們都瞭解瞭解。

最後想提醒的就是,對於這些快捷鍵,死記是很難記完的,根據我總結的一些語義話的方式去記,有公式的記公式,可能要快一點,然後就是多實踐,敲多了自己就記住了。我剛開始學的時候,還不知道有那些助記符,基本完全靠死記硬背,我就是用一張紙,然後把命令手寫抄到紙上,放在我的電腦旁,忘了就馬上拿來看看,別說,效果還挺好的。

祝你們好運!

大家好,我是桃翁,我為自己代言!

個人微信公眾號,以後儘量堅持每週一篇乾貨

個人微信公眾號

參考文章: VIM 百度百科 如何用Vim提高開發效率

相關文章