Sublime Text作为一款文本编辑器,最强大的是快速响应能力和"Goto Anything"功能, 用Ctrl+Shift+P执行编辑器功能,用Ctrl+P+@进行文件间与文件内部的跳转, 目前的编辑器还没有类似的,Vintage将vi的强大编辑能力吸收了进来,更是如虎添翼。
它不适合作为静态语言(如Java)的正式开发IDE,与“标准的”IDE(如Eclipse)比较, 不具备针对静态语言的代码重构功能;在代码自动补全方面,无法提供类库的类名/方法补全 (能够提供语言关键字和变量的补全);它无法提供调试环境,需要单独的代码调试器 (如JSwat)。所以Sublime Text适合作为展现语言(如HTML,Latex等)或者动态语言 (Python, PHP等)的开发工具。
但很多时候我们只是想浏览代码,或是写一些简单的试验程序,或是修改代码的一处细节, 启动Eclipse太慢了,用Sublime text这样text editor处理正合适。
借助Ant打造Java IDE
项目目录结构:项目根目录(\(PORJ_HOME)下存放源代码、编译后的class文件和需要引用的jar包 (而不是分开放在src, bin, lib文件夹下,适合于技术验证式的小项目), 以及sublime项目定义文件(ProjectName.sublime-project)和build.xml, 通过Ant的javac和java指令编译和运行Java代码,源代码不论什么包名都放在\)PORJ_HOME下 (Ant的javac指令会根据源代码的包名创建class文件的目录结构);
准备工作
-
指定用Ant做构建工具:修改[Preferences -> Browse Packages]打开packages文件夹, 修改Java/JavaC.sublime-build文件,将原来"cmd"后面的"javac"改为"ant.bat", 如果ant所在目录没有加到系统的\(Path里,这里需要写文件完整路径, 例如"D:/Apps/apache-ant-1.8.1/bin/ant.bat",然后将工作目录设置为项目根目录 (默认的就是项目文件所在目录,因此这句不写也行):"working_dir": "\)project_path";
-
安装AdvancedNewFile插件:利用package control的install new package功能, 装完后就可以用快捷键"Ctrl + Alt + N"在项目根目录下创建文件了;
创建Java项目
-
创建项目文件夹(TotalCMD),拷贝此文件夹的完整路径;
-
Sublime Text -> Project -> Add Folder: 将上一步创建的文件夹加入到Project中;
-
生成新的Sublime项目文件:Sublime Text -> Project -> Save Project As, 这样项目文件就定义好了,如果希望隐藏不必要的文件和文件夹: [Project -> Save Project As], 用file_exclude_patterns和folder_exclude_patterns属性实现,例如:
{
"folders":
[
{
"path": "/e/workspace/PNProject",
"file_exclude_patterns":
[
"*.sublime*"
]
}
]
}
注:还可以用"folder_exclude_patterns":["build"]这样的方式去掉文件夹。
- 在项目根目录下新建一个build.xml文件,主要内容是编译和运行java代码 (注意每个项目的启动类是不同的(java命令的classname参数), 拷贝这个模板时需要修改):
<?xml version="1.0" encoding="UTF-8"?>
<project name="ExProj" basedir="./" default="run">
<path id="lib.path">
<fileset dir="${basedir}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="compile">
<javac srcdir="${basedir}" destdir="${basedir}"
classpathref="lib.path" encoding="UTF-8" debug="true"/>
</target>
<target name="run" depends="compile">
<java classname="org.leechau.HelloWorld">
<classpath>
<pathelement path="${basedir}"/>
</classpath>
</java>
</target>
</project>
- 运行构建:[Tools -> Build](快捷键Ctrl+B);
打开Vintage模式
Vintage是vi风格的操作方式,当然要打开啦,方法是:
-
在user preference里加上:"ignored_packages": []
-
如果希望打开文档时初始状态是命令模式而不是插入模式, 再加上:"vintage_start_in_command_mode": true
自定义代码模板
-
[Tools -> New Snippet...];
-
填写模板内容(content),触发器(写完触发器按tab键展开为content中定义的代码) 和有效范围(定义那些文件中此模板有效);
-
保存模板文件:文件名统一约定为“范围名-触发器 .sublime-snippet”;
参考 http://www.granneman.com/webdev/editors/sublime-text/top-features-of-sublime-text/quickly-insert-text-and-code-with-sublime-text-snippets/#test
实例:Java代码中终端打印语句的代码模板(spl +
<snippet>
<content><![CDATA[
System.out.println(${1});
]]></content>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<tabTrigger>spl</tabTrigger>
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<scope>source.java</scope>
</snippet>
如果设置后不生效,检查各个标签的大小写是否正确(snippet文件是大小写敏感的), 例如CDATA要大写,tabTrigger中T大写。
Best Practice
- 所有的个性化配置都写在"Settings - User",不要修改"Settings -> Default";
Trouble Shooting
-
"Decode error - output not utf-8" when build java files: this is caused by adding ""shell": true" in JavaC.sublime-build. cmd.exe use GBK(cp936) for console output encoding, which is different with sublime's default output encoding utf-8. So adding ""encoding": "cp936"" in JavaC.sublime-build will resolve this problem. Reference: http://www.sublimetext.com/forum/viewtopic.php?f=3&t=1535&start=0
-
Run Java without Ant. But when your java codes have package names, it's really difficult to compile and run them because package names are hardly get by sublime. So always use Ant to build java codes in sublime. Reference: http://stackoverflow.com/questions/12030865/sublime-text-2-wont-run-java