编辑器和IDE之争又是程序员界的经典烂坑之一。真要当作问题争论将是一个无法终结的问题,在这里我只写写个人用编辑器和IDE的经验和观点。
事实上模块化、可编程、可与外部组件协作的编辑器是可以扩展出IDE的功能。因为IDE说白了就是一个集成环境,把外部的语义分析、项目管理、版本控制、构建调试功能与编辑器联合、打通。只要编辑器的UI组件和内部功能调用允许二次开发,其他人就能引入或者直接使用二次开发语言制作一些上述种种功能的组件,让它与编辑器交互数据。这样,编辑器完全可以扩展出IDE的功能。
现实中也确实看到这样的编辑器,其中有老牌的Emacs和vim,也有sublime和atom这样的新秀。它们的很多插件也确实工作得很令人满意,比如vim的YCM插件充分展示了编辑器也能不逊色于IDE。
然而从我的开发经验来说,仍然是Visual Studio、JetBrains、SlickEdit这些IDE真正解放了开发者,编辑器总有让人抓狂的时候。那么,如此嘲讽的现实究竟是怎么产生的?
真正的问题在于,Emacs和vim实在是“过于经典”了。尽管它们是模块化、可编程、可与外部组件协助的,但是Emacs使用了一种古老的二次开发语言——LISP,使用者和贡献者的门槛太高,解释器的性能和异步支持也弱;vim初衷是“vi improved”,为了兼容仅仅具有强大快捷键、缺乏模块化设计的vi,则用了一种弱爆了的脚本,不仅性能差、缺乏异步支持,而且难以进行模块化的开发,后来又不断尝试使用lua和python来二次开发,使得生态越来越乱。它们也都没有可移植的现代UI,只能使用丑陋的、不清晰的字符UI,无法使用图标、样式这样的现代UI,甚至连高亮色彩也受限制。
而新的竞争者们缺乏号召力,且不够成熟。sublime算是很成熟的新编辑器了。它的现代UI、现代开发语言、异步支持(待考证)确实让人觉得这才是编辑器该有的样子。可是,sublime 3才开始增加一些必要的特性,并长期保持Beta状态。昂贵的价格和弱爆的多国语言支持又限制了它的使用面。而使用习惯更是一个无法避免的问题。我认为atom也会遇到同样的问题。neovim则是最有戏的项目,但开发还在非常早期。老的太坑,新的发展不起来,造成了当前编辑器不成气候的局面。
然而编辑器对新语言的支持比新开发一个IDE方便得多,对于Rust、Go这样的新语言,非常需要编辑器来打造舒服的开发环境。(JetBrains似乎在改变这种局面,它的插件系统对一门新语言的支持能力非常强大,等同于一个新的IDE。比如现在已经有了Go的开发插件包,但这也许只是因为Go的语法比较简单)
后记
对个人做一些说明:我是一个vi党,不过我认为vi只是一种不错的操作模式(甚至不一定是最好的操作模式),尽管vim对这种操作模式支持更好。平时我用快捷键配置成vi模式的各种IDE和sublime,以及firefox。当然,还有vim自己。