Vim,牛逼
寫完 Shell 那篇后就想寫 Vim 了,因?yàn)槿祟愂飞献詈玫奈谋揪庉嬈骶褪?Vim,不贊同的請(qǐng)自覺(jué)持有保留意見(jiàn),哈哈哈。
Better, Stronger, Faster.
用這三個(gè)單詞來(lái)贊美 Vim,一點(diǎn)都不為過(guò)。只不過(guò),Vim 的學(xué)習(xí)曲線相當(dāng)?shù)拇螅@是一個(gè)連我都不得不承認(rèn)的事實(shí)。就好像彈一把吉他,一開(kāi)始學(xué)起來(lái)非常痛苦,簡(jiǎn)直想摔了它,但學(xué)會(huì)后,就能感受到樂(lè)器的無(wú)限魅力,以及學(xué)妹崇拜的小眼神。
來(lái)吧,下定決心擁抱它,沒(méi)有比它更好的文本編輯器了,非常地難學(xué),但卻不可思議地好用。
01、初識(shí) Vim
Vim 有著悠久的歷史。80 年代末,布萊姆·米勒在一個(gè)開(kāi)源的 vi(更早的一種計(jì)算機(jī)文本編輯器,我記得有個(gè)讀者的網(wǎng)名就叫這個(gè))基礎(chǔ)上開(kāi)發(fā)了 Vim 1.0 版本。
1994 年,Vim 3.0 中加入了里程碑式的多窗口編輯模式。
1996 年,Vim 4.0 中加入了圖形化界面的版本。
1998 年,Vim 5.0 中加入了語(yǔ)法高亮的功能。
。。。。。。
總之是,越來(lái)越強(qiáng)!最新的版本是 8.0,啟動(dòng)界面里會(huì)顯示一句非常暖心的話——「Help poor children in Uganda」,翻譯過(guò)來(lái)就是「請(qǐng)幫助烏干達(dá)的可憐孩童」。這讓我想起來(lái)我最喜歡的一支樂(lè)隊(duì)——Beyond 的一首歌《Amani》。
打開(kāi)終端,鍵入「vim」,就可以進(jìn)入啟動(dòng)界面了,如下圖所示。

Vim 有很多聰明的設(shè)計(jì),所以很多其他工具也支持 Vim 模式,比如說(shuō) Visual Studio Code。很牛掰的一點(diǎn)是,Vim 逃離了鼠標(biāo)的“魔掌”,只通過(guò)鍵盤就可以肆意地操作文本。
鍵入 :help 就可以查看 Vim 的幫助文檔,盡管文檔是英文的,但這的確是最權(quán)威的 Vim 學(xué)習(xí)資料了,聽(tīng)我一句勸,耐著性子讀一讀吧!

鍵入 :q 可以退出幫助文檔。當(dāng)然了,如果英文讀起來(lái)確實(shí)痛苦了些,我還為你準(zhǔn)備了在線的中文翻譯文檔,看這里:
https://yianwillis.github.io/vimcdoc/doc/help.html

02、實(shí)操 Vim
俗話說(shuō),“光說(shuō)不練假把戲。”咱們直接上手來(lái)體驗(yàn)一把。鍵入 vim xxx 命令。如下圖所示。

隨后敲回車鍵,就進(jìn)入 xxx 文件的閱讀模式了。如下圖所示。

在閱讀模式下,你需要嘗試下面這些命令。
上下左右移動(dòng):對(duì)應(yīng)上下左右鍵 按照詞移動(dòng):w(下一個(gè)詞),b(單詞的第一個(gè)字母),e(單詞的最后一個(gè)字母),不適合中文 按照行移動(dòng):0(第一行),$(行尾), :+行數(shù)直接跳轉(zhuǎn)到指定的行(此處的+意味著按下:后,再輸入行數(shù),比如 10)按照屏幕移動(dòng):H(屏幕頂部),M(屏幕中間),L(屏幕底部) 翻頁(yè):不同的鍵盤有所不懂,比如說(shuō) Mac 的巧克力鍵盤, fn+↑鍵向上翻,fn+↓鍵向下翻(此處的+意味著組合鍵)gg(移動(dòng)到文件開(kāi)頭),G(移動(dòng)到文件末尾) /+關(guān)鍵詞(此處的+意味著按下反斜杠后,再輸入關(guān)鍵詞)進(jìn)行搜索,n/N用于向下或者向上匹配
除此之外,閱讀模式下,你還可以:
鍵入 i進(jìn)入插入模式,此時(shí)會(huì)在窗口底部出現(xiàn)-- INSERT --的字樣。

在插入模式下按 esc 鍵退回到閱讀模式。鄭重其事的提醒:如果你不知道現(xiàn)在處于什么模式,就狂按 esc 鍵。
除了 i 鍵可以進(jìn)入插入模式,還有其他幾個(gè)鍵可以進(jìn)入插入模式,比如說(shuō) a 鍵可以在光標(biāo)后插入;o 鍵可以在當(dāng)前行后插入;0 鍵可以在當(dāng)前行前插入。
鍵入
dd刪除當(dāng)前行,并把刪除的行存到剪貼板里。鍵入
x刪除當(dāng)前光標(biāo)所在的一個(gè)字符。鍵入
p可用于粘貼上一次復(fù)制的內(nèi)容。鍵入
yy可以復(fù)制當(dāng)前行的內(nèi)容。鍵入
u可用于撤銷當(dāng)前操作。鍵入
:w可以保存當(dāng)前修改后的內(nèi)容。鍵入
:q!可以在不保存內(nèi)容的情況下退出 Vim。鍵入
:wq可以在保存內(nèi)容的情況下退出 Vim。
**溫馨提醒:**如果你是在插入模式,想要退出或者保存內(nèi)容的話,一定要先按 esc 鍵退出到閱讀模式。
好了,到此為止,你已經(jīng)算是入門級(jí)的 Vim 用戶了,真的,掌握了這些命令,其他編輯器能干的事,你都可以通過(guò) Vim 完成了。
03、進(jìn)階
孫悟空成為花果山水簾洞的大王之后,感到了空前的寂寞,他想要進(jìn)階,于是撐了一葉扁舟拜師學(xué)藝去了。同樣的,當(dāng)我們熟練掌握了上述這些命令之后,也會(huì)感到空前的寂寞,因?yàn)?Vim 的強(qiáng)大絕不止于此。
來(lái)看一下,Vim 是怎么重復(fù)自己的。
鍵入
.可以重復(fù)上一次的命令。這意味著什么呢?意味著如果我們鍵入dd刪除了一行內(nèi)容,如果我們還想刪除一行的話,不需要再按下兩次d鍵了,只需要按下一次.鍵就可以了。鍵入
N+命令可以重復(fù)某個(gè)命令 N 次。(此處的+意味著按下次數(shù)后,再輸入命令)。這意味著什么呢?意味著生產(chǎn)力的大幅度提升啊!
比如說(shuō),在閱讀模式下,鍵入 3dd 可以一次性刪除 3 行內(nèi)容;鍵入 10p 可以粘貼 10 次文本。
來(lái)個(gè)帶勁的哈。
通過(guò) vim hello.txt 打開(kāi)一個(gè)新的文本文件。然后鍵入 10+i+hello world+回車鍵+esc(此處的+意味著按下次數(shù)后,再鍵入 i 鍵進(jìn)入插入模式,再敲下 hello world,再按下回車鍵換行,再按下 esc 鍵退出到閱讀模式),奇妙的事情發(fā)生了,見(jiàn)下圖。

想一下,鍵入 10. 會(huì)發(fā)生什么?相信我,試玩之后,你會(huì)“哇”的。
妙,實(shí)在是妙。除此之外,你還可以鍵入:
%匹配括號(hào)來(lái)移動(dòng),包括{[(,前提條件是你需要把光標(biāo)移動(dòng)到括號(hào)上。*匹配單詞來(lái)向下一個(gè)移動(dòng)。(中文就無(wú)法使用了)#匹配單詞來(lái)向上一個(gè)移動(dòng)。(同上)
記住光標(biāo)的移動(dòng)就可以脫離鼠標(biāo)的束縛了。大多數(shù)命令都可以按照下面的方式來(lái)干:
光標(biāo)開(kāi)始的位置+命令+光標(biāo)結(jié)束的位置
比如 0y$ 意味著:
0,光標(biāo)移動(dòng)到行首 y,從這里開(kāi)始復(fù)制 $,直到行尾
如果你想看到光標(biāo)選中了哪些文本,可以先按下 v 鍵進(jìn)入可視化視圖,然后再操作光標(biāo),如下圖所示。

更強(qiáng)大的操作,可以看看耗子叔翻譯的一篇《簡(jiǎn)明 Vim 練級(jí)攻略》:
https://coolshell.cn/articles/5426.html
在閱讀模式下,鍵入 :sp 可以橫向分割窗口,鍵入 :vsp 可以豎向分割窗口,見(jiàn)下圖。

舒服吧?原來(lái)一邊編輯,一遍預(yù)覽,在 Vim 下,只需要鍵入三四個(gè)字符!
04、結(jié)語(yǔ)
如果你想在手頭備一份 Vim 的幫助手冊(cè),免得在用 Vim 的時(shí)候四處搜索,實(shí)話告訴你,我替你準(zhǔn)備了,就是這么貼心。真的,花了 2 天的時(shí)間呢,整理了一份《Vim 中文用戶手冊(cè)》,310 頁(yè),內(nèi)容非常全面。

這么優(yōu)質(zhì)的 PDF,怎么獲取呢?第一步,掃碼關(guān)注「沉默王二」公眾號(hào):
第二步,在公眾號(hào)后臺(tái)發(fā)送?009?獲取下載鏈接。
最后,多說(shuō)幾句。作為程序員,我們大部分的時(shí)間都花費(fèi)在摸魚上,不不不,代碼編輯器上,因此,花點(diǎn)時(shí)間來(lái)掌握一個(gè)適合自己的編輯器還是非常值得的。很多大佬都直接使用 Vim 來(lái)作為代碼編輯器,雖然我還沒(méi)達(dá)到這種高逼格,但使用 Vim 來(lái)操作日志和配置文件的頻率還是非常高的。
要想熟練掌握 Vim,你需要這樣做:
認(rèn)真閱讀這篇內(nèi)容; 堅(jiān)持使用 Vim 來(lái)完成所有的文本編輯工作,即使一開(kāi)始會(huì)很痛苦; 隨時(shí)查閱幫助文檔,強(qiáng)化肌肉記憶; 兩周時(shí)間的苦練后,你會(huì)發(fā)現(xiàn),工作和學(xué)習(xí)效率有了大幅度的提升。 一個(gè)月過(guò)后,你跑過(guò)來(lái)感謝我,“二哥,你丫的,牛逼”!
