編輯器和IDE之爭(zhēng)又是程序員界的經(jīng)典爛坑之一油宜。真要當(dāng)作問(wèn)題爭(zhēng)論將是一個(gè)無(wú)法終結(jié)的問(wèn)題际跪,在這里我只寫寫個(gè)人用編輯器和IDE的經(jīng)驗(yàn)和觀點(diǎn)。
事實(shí)上模塊化闷愤、可編程整葡、可與外部組件協(xié)作的編輯器是可以擴(kuò)展出IDE的功能。因?yàn)镮DE說(shuō)白了就是一個(gè)集成環(huán)境讥脐,把外部的語(yǔ)義分析遭居、項(xiàng)目管理、版本控制旬渠、構(gòu)建調(diào)試功能與編輯器聯(lián)合俱萍、打通。只要編輯器的UI組件和內(nèi)部功能調(diào)用允許二次開(kāi)發(fā)告丢,其他人就能引入或者直接使用二次開(kāi)發(fā)語(yǔ)言制作一些上述種種功能的組件枪蘑,讓它與編輯器交互數(shù)據(jù)。這樣,編輯器完全可以擴(kuò)展出IDE的功能岳颇。
現(xiàn)實(shí)中也確實(shí)看到這樣的編輯器照捡,其中有老牌的Emacs和vim,也有sublime和atom這樣的新秀赦役。它們的很多插件也確實(shí)工作得很令人滿意麻敌,比如vim的YCM插件充分展示了編輯器也能不遜色于IDE。
然而從我的開(kāi)發(fā)經(jīng)驗(yàn)來(lái)說(shuō)掂摔,仍然是Visual Studio、JetBrains赢赊、SlickEdit這些IDE真正解放了開(kāi)發(fā)者乙漓,編輯器總有讓人抓狂的時(shí)候。那么释移,如此嘲諷的現(xiàn)實(shí)究竟是怎么產(chǎn)生的叭披?
真正的問(wèn)題在于,Emacs和vim實(shí)在是“過(guò)于經(jīng)典”了玩讳。盡管它們是模塊化涩蜘、可編程、可與外部組件協(xié)助的熏纯,但是Emacs使用了一種古老的二次開(kāi)發(fā)語(yǔ)言——LISP同诫,使用者和貢獻(xiàn)者的門檻太高,解釋器的性能和異步支持也弱樟澜;vim初衷是“vi improved”误窖,為了兼容僅僅具有強(qiáng)大快捷鍵、缺乏模塊化設(shè)計(jì)的vi秩贰,則用了一種弱爆了的腳本霹俺,不僅性能差、缺乏異步支持毒费,而且難以進(jìn)行模塊化的開(kāi)發(fā)丙唧,后來(lái)又不斷嘗試使用lua和python來(lái)二次開(kāi)發(fā),使得生態(tài)越來(lái)越亂觅玻。它們也都沒(méi)有可移植的現(xiàn)代UI想际,只能使用丑陋的、不清晰的字符UI串塑,無(wú)法使用圖標(biāo)沼琉、樣式這樣的現(xiàn)代UI,甚至連高亮色彩也受限制桩匪。
而新的競(jìng)爭(zhēng)者們?nèi)狈μ?hào)召力打瘪,且不夠成熟。sublime算是很成熟的新編輯器了。它的現(xiàn)代UI闺骚、現(xiàn)代開(kāi)發(fā)語(yǔ)言彩扔、異步支持(待考證)確實(shí)讓人覺(jué)得這才是編輯器該有的樣子∑可是虫碉,sublime 3才開(kāi)始增加一些必要的特性,并長(zhǎng)期保持Beta狀態(tài)胸梆。昂貴的價(jià)格和弱爆的多國(guó)語(yǔ)言支持又限制了它的使用面敦捧。而使用習(xí)慣更是一個(gè)無(wú)法避免的問(wèn)題。我認(rèn)為atom也會(huì)遇到同樣的問(wèn)題碰镜。neovim則是最有戲的項(xiàng)目兢卵,但開(kāi)發(fā)還在非常早期。老的太坑绪颖,新的發(fā)展不起來(lái)秽荤,造成了當(dāng)前編輯器不成氣候的局面。
然而編輯器對(duì)新語(yǔ)言的支持比新開(kāi)發(fā)一個(gè)IDE方便得多柠横,對(duì)于Rust窃款、Go這樣的新語(yǔ)言,非常需要編輯器來(lái)打造舒服的開(kāi)發(fā)環(huán)境牍氛。(JetBrains似乎在改變這種局面晨继,它的插件系統(tǒng)對(duì)一門新語(yǔ)言的支持能力非常強(qiáng)大,等同于一個(gè)新的IDE糜俗。比如現(xiàn)在已經(jīng)有了Go的開(kāi)發(fā)插件包踱稍,但這也許只是因?yàn)镚o的語(yǔ)法比較簡(jiǎn)單)
后記
對(duì)個(gè)人做一些說(shuō)明:我是一個(gè)vi黨,不過(guò)我認(rèn)為vi只是一種不錯(cuò)的操作模式(甚至不一定是最好的操作模式)悠抹,盡管vim對(duì)這種操作模式支持更好珠月。平時(shí)我用快捷鍵配置成vi模式的各種IDE和sublime,以及firefox楔敌。當(dāng)然啤挎,還有vim自己。