最近因为公司项目需要,调研了一下Openresty。因为Openresty是基于lua语言编写,对于IDE的选择让我很纠结。在笨重的IDEA和轻快的Sublime间纠结了很久,两者都做了尝试。Idea因为写Java一直用,已经非常熟悉,但是在写动态脚本语言方面,显然不能发挥出它的优势。首先是代码导航,因为动态解释的脚本语言,函数是动态的,所以往往不能定位到正确的方法定义文件。另外就是感觉启动太慢了,本身一门轻快的脚本语言,却要启动一个庞大的IDE,有种杀鸡用牛刀的感觉。最后就是因为同时要写Java和Lua,这样就要开两个Idea的workspace,MacOS版本的Idea好像有bug,全屏的情况下,多切换几次,有一个工作空间就会出现黑屏。。。体验不好。最终决定尝试使用Sublime作为IDE。

之前曾经使用过MyEclipse,Eclipse,NetBean,Idea。但是在切换这些IDE的时候,都没有什么感触,可能是因为这些IDE的功能都大同小异,所以切换起来比较自然,不会有什么不适感。但是切换到Sublime时,明显的感觉到了不适感。Sublime被称为最性感的编辑器,注意,本质上他是一个编辑器。是Sublime强大的扩展性和丰富的插件库将它铸造成了一个前端工程师喜爱的IDE。基于这种原因,要上手Sublime,就要先明确自己的需求,然后逐个去安装适当的插件。之前自己对于一个IDE的需求其实是很模糊的,因为成熟的IDE基本都已经帮助你打包好了,你只知道用的很爽,但是不知道是哪个功能让你觉得很爽。但是这一回,我已经总结出一个IDE要用的很爽必须具备的一些功能。就像收藏家看老物件评品相一样,今天就来看看一个IDE可以从哪几个方面做评价。

代码阅读

代码阅读的需求,可以细分为:高亮,定位,结构分析,阅读历史。高亮即按照文件的指定语法,对语法关键字进行高亮渲染。这在Sublime上可以通过安装对应语言的Synax插件可以做到。高亮可以提高代码的阅读速度,同时也可以对代码书写有一定的帮助,这个另说。定位是提高代码流畅体验必须具备的功能,代码阅读过程中,是有上下文语境的,变量从谁传给了谁,之后被做了什么处理,整个工作流程的模拟,如果因为找代码花了很多时间,很可能就打破了语境,需要重头再来。这个Sublime本身就做的不错,Goto Anything 功能使用起来很顺畅,可以依据输入的关键字跳转到任意文件。结构分析,指的是对于一个代码文件的结构剖析功能,这个模块有哪些方法,有哪些内置变量,对谁有哪些依赖,哪些模块调用了该模块的方法,可以有一个分析展示。这个对于理解代码架构很有帮助。这一块我在Sublime始终还没有找到合适的工具,也是因为Lua是动态解释的语言,所以代码不像预编译语言一样可以分析,这个就算是放到Idea一样也是做不到位,所以在这个特性上没有过分纠结。阅读历史和定位其实是相辅相成的,刚才说到阅读代码有上下文语境,这个阅读历史就是为了在忘记了上下文的时候,能够回溯刚才查看代码的路径,帮助回忆语境用的。有点类似录像机,可以不停的重放刚刚代码跳转的路径,加深印象。这个功能Sublime本身也是有的,但是快捷键很有可能有冲突,我修改成了和Idea一样的快捷键。这里附一份我自定义的热键,从Idea转Sublime的同学可以参考一下。

1
2
3
4
5
6
7
8
9
10
11
12
[
{"keys":["super+shift+r"],"command":"goto_symbol_in_project"},
{"keys":["super+alt+left"], "command": "jump_back" }, ##往后回溯
{"keys":["super+alt+right"], "command": "jump_forward" }, ## 往前播放
{"keys":["super+shift+n"],"command": "show_overlay", "args": {"overlay": "goto", "show_files": true}},
{"keys":["super+alt+up"], "command": "swap_line_up" },
{"keys":["super+alt+down"], "command": "swap_line_down" },
{"keys":["super+y"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Line.sublime-macro"} },
{"keys":["f3"], "command": "find_next" },
{"keys":["shift+f3"], "command": "find_prev" },
{"keys": ["alt+w"], "command": "expand_region" }
]

代码书写

代码书写,我因为还没在Sublime上做长时间的Coding,可能体验不全,但是就现在的体会来说,至少需要的是高亮和静态代码检查。高亮可以帮助纠正关键字的书写错误,静态代码检查则能帮助纠正很多不必要的低级失误,如果IDE不具备静态代码检查功能,那将会是我这类普通程序员的灾难,代码编译通过前将要花很长的时间解决编译错误…Sublime在静态代码上有一个强大的插件————SublimeLinter,不过Linter本身只是一个静态代码检查框架,还需要和具体语言的指定Linter插件结合起来才能生效,有兴趣的同学可以去翻翻。

代码运行调试

代码运行测试这一部分,对于一个IDE来说相当重要,运行且说,断点调试功能对于一个程序员的辅助作用相信大家都能体会的到。运行这一块Sublime本身就有比较强大的BuildSystem,可以指定一些CMD指令做快捷操作。但是在断点调试上相对Idea来说还是显得有些弱鸡…毕竟是编辑器出生,不能强求…而且在某处看到过用Lua的大神说到他的调试经验,靠模块测试和集成测试完成完全足够,不用作调试…姑且这么安慰自己吧…

以上大概就是在上手一个新的IDE的时候可以把玩的几个方面,说到的几点都具备,基本就可以入坑了。如果有一些缺陷,那可能就要好好考量考量了,你的代码书写场景里,是不是确实需要这样的功能。