曾經(jīng)有一段時(shí)間雷蹂,編輯器領(lǐng)域的創(chuàng)新停滯了。在web編程走紅杯道,尤其是electron出現(xiàn)之后匪煌,這個(gè)領(lǐng)域又上了一個(gè)新臺(tái)階。Atom, VsCode等等替代了之前唯一的但是臃腫的跨平臺(tái)選擇 - Java党巾。一時(shí)之間萎庭,大家都開始用網(wǎng)頁(yè)來寫代碼了。
在這樣一個(gè)時(shí)代齿拂,還要學(xué)Vim這種中古的技能嗎驳规?我來討論一下為什么要,不但要署海,而且必須要吗购。
- Vim仍然是最高效的編輯器
- Vim仍然在高速進(jìn)化
- Vim是編輯器領(lǐng)域的Javascript
高效
Vim的學(xué)習(xí)曲線是出了名的高。但是這背后是高投入砸狞,高產(chǎn)出的效率捻勉。
[圖片上傳失敗...(image-3ae967-1513779322378)]
隨便舉幾個(gè)例子:dd
刪除一行,兩個(gè)鍵搞定刀森。普通的編輯器可能要<HOME><Shift-End><Del><Del>
這樣的組合才能搞定踱启。
w
可以跳過一個(gè)單詞,普通的編輯器要<Ctrl-Right>
才可以搞定。一半的按鍵埠偿,還不包括遠(yuǎn)離中原的Ctrl
鍵透罢。mM
記住一個(gè)位置,'M
隨時(shí)跳轉(zhuǎn)到該位置胚想。一般的編輯器...說實(shí)在的我并不知道一般的編輯器如何做類似的操作琐凭。在VsCode的菜單里掃了兩邊也沒找到芽隆。
這只是九牛一毛浊服。而且用的時(shí)間越久,你積累的技巧就越多胚吁,你的效率就越高牙躺。
高效的另外一面是:反應(yīng)快。其實(shí)要說功能強(qiáng)大腕扶,JetBrain的產(chǎn)品無疑都很牛孽拷。但是在大腦高速運(yùn)轉(zhuǎn)的時(shí)候,思維到屏幕上字符的轉(zhuǎn)化過程減少2-300毫秒導(dǎo)致體驗(yàn)的差別是巨大的半抱。就好像脓恕。。窿侈。炼幔。
其實(shí)Vim的高效很大程度上應(yīng)該歸功于所謂模式編輯 - Vim于大多數(shù)編輯器不同,有insert,
normal,
visual等等幾個(gè)模式史简。這也是造成它學(xué)習(xí)成本高乃秀,被人吐槽多的原因。最近網(wǎng)上瘋傳的段子就是“如何退出Vim”圆兵。各種歡快的圖片層出不窮跺讯。這里忍不住貼一個(gè)瘋狂的圖片。如果你看到這個(gè)圖片決定不學(xué)Vim了殉农,那是你的損失刀脏。反正我覺得這酷畢了。
[圖片上傳失敗...(image-86dba0-1513779322378)]
進(jìn)化
Vim 從Vi進(jìn)化而來超凳,為一個(gè)略顯骨感的編輯引擎加入了諸多特性:
- 跨平臺(tái)
- 語法高亮
- diff
- split
- plugin和vimscript....
在大約兩年前愈污,neovim出現(xiàn)了。它主要做了這么幾件事:
- 將Vim的開發(fā)方式帶入21世紀(jì)
- 加入async方式
- 遠(yuǎn)程控制
[圖片上傳失敗...(image-664089-1513779322378)]
Vim的開發(fā)一直都是一個(gè)個(gè)人秀聪建。當(dāng)kernel已經(jīng)從patch遷移到CVS遷移到bitlocker遷移到git的時(shí)候钙畔,當(dāng)sourceforge已經(jīng)經(jīng)歷了諾基亞式的巔峰到谷底的時(shí)候,Bram還基本停留在N年前的模式金麸。當(dāng)然擎析,Vim首先是一個(gè)個(gè)人項(xiàng)目,無論怎么做都不過分。但單從技術(shù)進(jìn)步的角度來講揍魂,這確實(shí)是逆潮流的桨醋。
async看來是一件小事,但是卻從根本上移除了用戶體驗(yàn)的絆腳石现斋。neovim出現(xiàn)之后喜最,包括ALE等等在內(nèi)的各種創(chuàng)新涌現(xiàn)了出來。甚至Vim8也不上了這個(gè)缺口庄蹋。這個(gè)領(lǐng)域發(fā)展的速度一下子從步行編程了摩托車瞬内,出來一兩個(gè)偉大的產(chǎn)品一點(diǎn)也不出奇。
遠(yuǎn)程控制用一種叫做msgpack的IPC將編輯核心和UI徹底分割了限书。方便了UI編寫者虫蝶。其中一個(gè)令人振奮的就是和VsCode的集成。
寫這篇文章的時(shí)候倦西,恰逢neovim最新的newsletter發(fā)出能真。有興趣的可以戳這里看看。
Javascript
我在拿編程語言和一個(gè)編輯器做比較嗎扰柠?我喝多了粉铐?
現(xiàn)在流行,甚至不怎么流行的編輯器或IDE卤档,都支持插件蝙泼。而在這些插件里面,總有一個(gè)插件是不會(huì)缺席的裆装,那就是Vim踱承。JetBrain有IdeaVim,VsCode有哨免,Atom有茎活,Sublime有,Chrome, Firefox也有琢唾,連Office都有载荔,還收費(fèi)! 這里面有一個(gè)邏輯,不是因?yàn)閂im很流行采桃,而是Vim有意無意地創(chuàng)造了一種編輯的語言懒熙。比如dw,yy, g, gg
等等普办。這些快捷的命令在熟悉之后工扎,不再是簡(jiǎn)單的命令而已,而成為可以組合的元素衔蹲。你不會(huì)在思考用什么樣的命令肢娘,而任由你的指頭自行在鍵盤上跳動(dòng),進(jìn)行它自己的編程。
學(xué)會(huì)了Vim之后橱健,無論什么IDE而钞,無論在什么平臺(tái)上,都無需再學(xué)習(xí)另外一套鍵盤快捷拘荡【式冢可謂一勞永逸。例如現(xiàn)在如日中天的VsCode珊皿,有非常多的快捷鍵网缝,而且每個(gè)平臺(tái)各有不同。但是只用安裝一個(gè)Vim插件亮隙,這些快捷鍵都不用學(xué)了途凫。
之所以和Javascript比垢夹,是因?yàn)椋簬缀跛械恼Z言都可以transpile成Javascript; 幾乎所有的編輯器和IDE溢吻,都支持Vim插件。
[圖片上傳失敗...(image-79f821-1513779322378)]
人生苦短果元,快學(xué)Vim!