Sublime Text 2是个相当棒的编辑器,这一点异次元Lucifr的文章都介绍的很充分了。用了一段时间觉得Sublime确实“性感”而“强大”。

只是Sublime Text 2毕竟是一款“编辑器”而非“集成开发环境”IDE。在很多IDE中常见的功能如代码智能提示(输入一个变量然后“.”之后会显示可用函数等)、工程和构建等,都显得相对薄弱或者缺失。我在异次元的文章评论里看到很多抱怨Build不好用,没有代码提示等,其实是理解错了Sublime Text 2自身的定位。

还好Sublime Text 2有大量强大的扩展可以实现IDE才具有的便捷功能。前两天试用了几个实现代码提示的插件,在此分享一下,共有三款:实现C/C++/ObjC等语言代码提示的SublimeClang,实现除C系外大量语言的代码提示的SublimeCodeIntel,和实现Node.js相关功能的SublimeText-Nodejs(包名为Node.js)。


1.SublimeClang

主页:https://github.com/quarnster/SublimeClang

提到编程语言,最大头的必须是C/C++一系。SublimeClang名字中的Clang我最早以为是C* language的意思,以表明是支持C语系的工具,后来才反应过来是因为它使用的是clang编译体系提供的工具的原因。

有关于clang这个gcc的强力竞争者我还没用过,对于它的强大却是早有耳闻。最近FreeBSD的发行已经开始搭载clang了。可惜Win下它还有很多很多问题,不像MinGW那样具有可用性。但是单从代码分析查错上似乎还是无人能出其右的。clang自一开始就提到过将提供编译器级别的代码提示工具,SublimeClang就是利用的这一点。

SublimeClang支持代码提示的语言包括C、C++、ObjC、ObjC++。安装方式很简单,用Package Control安装SublimeClang即可。很多别的安装教程提示要在Windows上安装clang,实际上是不需要的。SublimeClang只在static analyzer这个功能上需要clang自身的配合,除此之外的功能它自己就能完成。而在Windows上安装clang是众所周知的麻烦……所以别趟这趟浑水了=。=

安装完成后切记要进行配置,未加配置的SublimeClang随便打开一个.cpp源文件,稍等一会儿它就会在下方弹出信息框提示找不到头文件,需要对SublimeClang配置。可以用Ctrl+Shift+P呼出Command Panel找到Preference: SublimeClang Settings - User/Default修改,也可以在Preference—Package Settings里面找到。在Default和User文件里修改皆可,当然我个人建议把自己的修改放在User文件里方便管理。

主要需要配置的属性项包括:

1.”show_output_panel”: true或false。这是刚才那个提示窗显示与否的设置,一般来说如果只使用代码提示的功能的话,配置好了的SublimeClang不会返回多重要的信息的,反而一些错误会干扰输入。所以我是关掉了的。

2.”dont_prepend_clang_includes”: true或false。这个选项控制是否不包括clang自身的头文件。建议用true取消包括,以防产生冲突。

**3.”additional_language_options”和”options”**。这个是配置的大头。可以注意到这里的形式和clang命令行调用时的编译选项是一样的(只是不包括指明lib的部分)。简单的修改它Default项中头文件目录的选项很可能是没有效果的(尤其在Windows下)。我最常使用MinGW GCC和wxWidgets,参考SublimeClang某issue里一位用户提供的配置,修改了那几个目录之后工作完全正常。可以看到里面还有很多宏定义的问题。这个必须要参考自身的开发环境。

除了在配置文件中配置外,在Sublime Text 2自身提供的项目功能的项目文件中也可以修改SublimeClang的选项。这一点在SublimeClang的Default配置文件注释里有提到。可以利用这一点,只把编译器和常用库的选项写进User配置文件里,而把项目相关的库放到项目文件里配置。

配置好之后SublimeClang就能正常使用了。值得一提的是SublimeClang的速度非常快,预处理一个wxWidgets的程序不超过2秒,之后wxWidgets里的各种对象的提示就全有了。相比后面提到的SublimeCodeIntel快了几倍。


2.SublimeCodeIntel

主页:https://github.com/Kronuz/SublimeCodeIntel

此Intel非AMD的那个Intel,CodeIntel是Code Intellisense的意思。代码提示的英文就是这个。显然英文的表述比中文“代码提示”四个字要明确很多……

SublimeCodeIntel是从Open Komodo项目中移植出来的代码提示插件。受此限制虽然代码提示支持的语言很多,但是并不包含最重要的C语系和Java语系……支持的语言包括:PHP, Python, RHTML, JavaScript, Smarty, Mason, Node.js, XBL, Tcl, HTML, HTML5, TemplateToolkit, XUL, Django, Perl, Ruby, Python3。

安装方式也是可以通过Package Control直接安装,包名就是SublimeCodeIntel。

SublimeCodeIntel几乎不需要配置。事实上它所支持的语言需要面临的“库”的问题也少很多。具体的扩展库的配置方式在首页有写。但是似乎不是存放在常规Sublime Text 2的配置文件中的……这个比较烦人。

SublimeCodeIntel在使用上,打开文件后需要先尝试使用一次代码提示来刺激它进行初始化工作。这个时间相比SublimeClang就要长很多,我用一个Node.js的最简单站点测试大概在10秒左右。之后代码提示工作就正常了。

但是从测试上看……至少Node.js上的表现是不如接下来介绍的SublimeText-Nodejs的。以fs.为例,后面提示的内容相当少。


 

3.SublimeText-Nodejs

主页:https://github.com/tanepiper/SublimeText-Nodejs

因为对Node.js兴致浓厚,而SublimeCodeIntel表现又不给力,我就找到了这个SublimeText-Nodejs。它代表了一类代码提示插件,就是专门为某种语言设计的代码提示插件。SublimeText-Nodejs就是专门为Node.js设计的。这么说也不太对,其实从它在Sublime Text 2的包名“Node.js”就能看出来,它实际上是作为Sublime Text 2对某门语言的正式支持的扩展来出现的,就像Sublime Text 2自带的C、C++等包一样。只是自带的那些没有代码提示功能,只有语法高亮、snippets和Build system配置。

SublimeText-Nodejs的安装也可以使用Package Control来安装,包名是Node.js。

它的代码提示是完全为Node.js优化的,也不需要Node.js的支持。比如输入fs.后它会提示所有可用的函数,并且简要的指明其参数的作用,比如req、res、callback这样。非常方便。但是有一些问题,它和SublimeCodeIntel的提示会产生冲突,输入fs时和输入fs.时两个扩展的提示会依次出现,很烦人。可以在SublimeCodeIntel里屏蔽掉Javascript的提示,或者临时禁用比较好。

除了代码提示外,SublimeText-Nodejs也提供了Build system的支持,只是尚且不算强大。而且和Sublime Text 2自带的Build system一样,可自定义性相对较弱。而据作者说将来会引进Jake(用于Node.js的make……就好像Ruby的rake)。但是Jake似乎尚未成为Node.js开发者的必备工具,我对这个新的尝试持保留态度。


 

其实真正意义上提供了泛用的代码提示功能的只有SublimeCodeIntel,但是像所有所谓的“泛用”工具一样它的表现并不出人意料的不那么好。

对于大部分语言,Sublime Text 2的扩展中都有类似SublimeText-Nodejs这样特制的代码提示插件,比如Java的SublimeJava,新出的Go语言的SublimeGo,都为该语言的开发者提供了很多适用的实用功能。