編輯器和IDE之爭又是程序員界的經典爛坑之一。真要當作問題爭論將是一個無法終結的問題,在這里我只寫寫個人用編輯器和IDE的經驗和觀點。
事實上模塊化、可編程、可與外部組件協(xié)作的編輯器是可以擴展出IDE的功能。因為IDE說白了就是一個集成環(huán)境,把外部的語義分析、項目管理、版本控制、構建調試功能與編輯器聯(lián)合、打通。只要編輯器的UI組件和內部功能調用允許二次開發(fā),其他人就能引入或者直接使用二次開發(fā)語言制作一些上述種種功能的組件,讓它與編輯器交互數(shù)據(jù)。這樣,編輯器完全可以擴展出IDE的功能。
現(xiàn)實中也確實看到這樣的編輯器,其中有老牌的Emacs和vim,也有sublime和atom這樣的新秀。它們的很多插件也確實工作得很令人滿意,比如vim的YCM插件充分展示了編輯器也能不遜色于IDE。
然而從我的開發(fā)經驗來說,仍然是Visual Studio、JetBrains、SlickEdit這些IDE真正解放了開發(fā)者,編輯器總有讓人抓狂的時候。那么,如此嘲諷的現(xiàn)實究竟是怎么產生的?
真正的問題在于,Emacs和vim實在是“過于經典”了。盡管它們是模塊化、可編程、可與外部組件協(xié)助的,但是Emacs使用了一種古老的二次開發(fā)語言——LISP,使用者和貢獻者的門檻太高,解釋器的性能和異步支持也弱;vim初衷是“vi improved”,為了兼容僅僅具有強大快捷鍵、缺乏模塊化設計的vi,則用了一種弱爆了的腳本,不僅性能差、缺乏異步支持,而且難以進行模塊化的開發(fā),后來又不斷嘗試使用lua和python來二次開發(fā),使得生態(tài)越來越亂。它們也都沒有可移植的現(xiàn)代UI,只能使用丑陋的、不清晰的字符UI,無法使用圖標、樣式這樣的現(xiàn)代UI,甚至連高亮色彩也受限制。
而新的競爭者們缺乏號召力,且不夠成熟。sublime算是很成熟的新編輯器了。它的現(xiàn)代UI、現(xiàn)代開發(fā)語言、異步支持(待考證)確實讓人覺得這才是編輯器該有的樣子??墒牵瑂ublime 3才開始增加一些必要的特性,并長期保持Beta狀態(tài)。昂貴的價格和弱爆的多國語言支持又限制了它的使用面。而使用習慣更是一個無法避免的問題。我認為atom也會遇到同樣的問題。neovim則是最有戲的項目,但開發(fā)還在非常早期。老的太坑,新的發(fā)展不起來,造成了當前編輯器不成氣候的局面。
然而編輯器對新語言的支持比新開發(fā)一個IDE方便得多,對于Rust、Go這樣的新語言,非常需要編輯器來打造舒服的開發(fā)環(huán)境。(JetBrains似乎在改變這種局面,它的插件系統(tǒng)對一門新語言的支持能力非常強大,等同于一個新的IDE。比如現(xiàn)在已經有了Go的開發(fā)插件包,但這也許只是因為Go的語法比較簡單)
后記
對個人做一些說明:我是一個vi黨,不過我認為vi只是一種不錯的操作模式(甚至不一定是最好的操作模式),盡管vim對這種操作模式支持更好。平時我用快捷鍵配置成vi模式的各種IDE和sublime,以及firefox。當然,還有vim自己。