不可否認(rèn),Vim是一款優(yōu)秀的編輯器,尤其是其體積之小、速度之快、可擴(kuò)展性之強(qiáng),使其屹立至今,我的朋友曾經(jīng)遇到一個(gè)朋友,在打拳皇的時(shí)候詢問(wèn)上下左右是不是用的HJKL,當(dāng)時(shí)我的朋友并沒(méi)有反應(yīng)過(guò)來(lái),對(duì)方感覺到深深的失望。
對(duì)Vim有信仰的程序員甚至為自己HHKB的Esc鍍金:

Vim有非常多優(yōu)秀的擴(kuò)展:


由于這些擴(kuò)展顏值太高,我用著如此好用的現(xiàn)代編輯器,都甚至想去學(xué)習(xí)一下Vim,這里有一個(gè)練習(xí)Vim比較棒的入門倉(cāng)庫(kù),想學(xué)習(xí)的各位可以去看一下:
GitHub - dofy/learn-vim: Vim 實(shí)操教程(Learning Vim)Vim practical tutorial.
那么我們可以先來(lái)稍微看一下,Vim有6種基本編輯模式:
普通模式(Normal mode)
插入模式(Insert Mode)
可視模式(Visual Mode)
選擇模式(Select Mode)
命令行模式(Command line Mode)
Ex模式(Ex Mode)
What?總有種感覺,這一定不是我這個(gè)年紀(jì)該承受的傷害,我們還是從基本的實(shí)操來(lái)對(duì)比學(xué)習(xí)Vim吧。
工作場(chǎng)景
由于高熟練度使用Vim才比較瀟灑,在成為一個(gè)成熟的Vimer之前,我建議把我們的“按鍵重復(fù)”及“重復(fù)前延遲”兩個(gè)選項(xiàng)開至最騷,以應(yīng)對(duì)光標(biāo)移動(dòng)需求。

指定行
我們?cè)诓榭磮?bào)錯(cuò)信息的時(shí)候,最關(guān)注的就是行號(hào),能夠直接跳到指定行號(hào)debug,實(shí)在是美滋滋,這一點(diǎn)在vim中使用行號(hào) + gg可以做到,在vscode中可以使用Control + G。
詞間跳躍
詞間跳越是Vim中做得非常優(yōu)秀的一點(diǎn),其中w可以跳到當(dāng)前詞最后一個(gè)字符之后,e可以跳到當(dāng)前詞最后一個(gè)字符之上,相當(dāng)于vscode中使用option+arrow的操作,但是說(shuō)實(shí)話,無(wú)論是Vim還是Vscode,這一點(diǎn)上做得都不如Webstorm,對(duì)中文的支持不夠友好,這一點(diǎn)可以參見黃玄的博客Vim 與中文輸入法 - 黃玄的博客 | Hux Blog
擴(kuò)大選擇
使用v模式可以進(jìn)行文本的選擇操作,再加上w、e的助力可以達(dá)到擴(kuò)大選擇的作用,當(dāng)然僅限于英文中使用,在中文中常常會(huì)將一句非常長(zhǎng)的話給收進(jìn)來(lái)。
多行編輯
多行編輯是現(xiàn)代編輯器非常出色的一個(gè)功能,在vscode中長(zhǎng)按option再加上點(diǎn)擊即可添加多個(gè)光標(biāo),以達(dá)到多行同時(shí)編輯的目的,在vim中同樣可以做到這一點(diǎn),但是對(duì)列位置有要求(鄙人才疏學(xué)淺,如果有更好的方式請(qǐng)指出),就是通過(guò)塊選擇Control + V再輔以Shift + I的方式進(jìn)行多行注入。
塊選擇
塊選擇最初在我眼里是Vim獨(dú)有的帥氣存在,但其實(shí)在vscode中也不是不可以做到,即運(yùn)用連選+多行編輯的組合,Shift + Option + 鼠標(biāo)點(diǎn)按,這樣的編輯體驗(yàn)非常美好,在我心里實(shí)在是吊打了Vim,沒(méi)有嘗試過(guò)的兄弟請(qǐng)務(wù)必馬上試試。
重構(gòu)
在業(yè)務(wù)中的一個(gè)常見場(chǎng)景是對(duì)變量進(jìn)行重命名,如果是Javascript,由于這門語(yǔ)言的特殊性,雖然vscode已經(jīng)對(duì)其有較好的基于jsdoc的類型支持,但依然不能保證重命名的準(zhǔn)確性,只能夠提供“更改所有匹配項(xiàng)”的功能(順帶一提,ts文件支持重命名功能),并且最好改完后去diff看看有沒(méi)有改壞了什么地方,體驗(yàn)非常差。
這一點(diǎn)我認(rèn)為在vim中表現(xiàn)得更為糟糕,我在學(xué)習(xí)vim的過(guò)程中見到許多Vim大佬都是用grep去跳轉(zhuǎn)到變量定義的,這一點(diǎn)在現(xiàn)在編輯器上基本是都是一個(gè)Command + 鼠標(biāo)點(diǎn)擊就能夠過(guò)去的,這似乎對(duì)編輯者的記憶力要求頗高了。
正則查詢
在正則查找方面Vim支持得挺好的,沒(méi)有什么毛病,但是在書寫正則的過(guò)程中不是實(shí)時(shí)的,并且不支持批量修改,這一點(diǎn)Sublime天生支持,而在vscode中科院通過(guò)Option + Enter開啟,
文件查找
如果你使用過(guò)Webstorm的雙Shift查找,或者是vscode、sublime的Command + P,你就會(huì)覺得vim在面對(duì)大型項(xiàng)目的時(shí)候,對(duì)業(yè)務(wù)的熟練要求是頗高了。
最后
我對(duì)Vim了解不夠多,我覺得能好好寫項(xiàng)目的,自己喜歡的就夠了,雖然我從入門到放棄,但是讓我收獲了一個(gè)瀏覽器利器:
GitHub - philc/vimium: The hacker’s browser.
VM上Vim是改代碼利器,但僅限于雕琢,正常的碼代碼的過(guò)程中我是一定不會(huì)使用Vim的,并且我想問(wèn)一問(wèn)那些Vim大佬,是不是一般不寫中文注釋的……