#摘要(Abstract)
本文系统全面的介绍了SublimeText,旨在成为最优秀的SublimeText中文教程。
#更新记录
1.2014/09/27:完成初稿
2.2014/09/28:
更正打开控制台的快捷键为Ctrl+`
更正全局替换的快捷键为Ctrl+Alt+Enter
3.2016/09/15:作者已全面转向VisualStudioCode
#前言(Prologue)
SublimeText是一款跨平台代码编辑器(CodeEditor),从最初的SublimeText1.0,到现在的SublimeText3.0,SublimeText从一个不知名的编辑器演变到现在几乎是各平台首选的GUI编辑器。而这样优秀的编辑器却没有一个靠谱的中文教程,所以我试图通过本文弥补这个缺陷。
#编辑器的选择(EditorChoices)
从初学编程到现在,我用过的编辑器有EditPlus、UltraEdit、Notepad++、Vim、TextMate和SublimeText,如果让我从中推荐,我会毫不犹豫的推荐Vim和SublimeText,原因有下面几点:
1.跨平台:Vim和SublimeText均为跨平台编辑器(在Linux、OSX和Windows下均可使用)。作为一个程序员,切换系统是常有的事情,为了减少重复学习,使用一个跨平台的编辑器是很有必要的。
2.可扩展:Vim和SublimeText都是可扩展的(Extensible),并包含大量实用插件,我们可以通过安装自己领域的插件来成倍提高工作效率。
3.互补:Vim和SublimeText分别是命令行环境(CLI)和图形界面环境(GUI)下的最佳选择,同时使用两者会大大提高工作效率。
#个人背景(PersonalBackground)
我是一名非常典型的程序员:平时工作主要在Linux环境下使用Java和Python,偶尔会用HTML+CSS+JavaScript编写网页;业余时会在Windows环境编写一些C#程序(包括控制台程序(ConsoleApplication)和移动应用(MobileApp),也会玩一些非主流语言(比如Haskell,ML和Ruby等)以拓展见识。
所以这篇文章会我的个人工作内容为主要使用场景(Scenario),尽管无法覆盖到所有的使用场景,但我认为依然可以覆盖到绝大部分,如果您认为我遗漏了什么内容,请在文章下面回复,我会尽量更新。
#本文风格(WritingStyle)
受益于K&RC的写作风格,我倾向于以实际案例来讲解SublimeText的功能,所以本文中的例子均源于我在实际开发时遇到的问题。
此外,把本文会使用大量动画(GIF)演示SublimeText的编辑功能,因为我发现图片难以演示完整的编辑流程(Workflow),而视频又过于重量级。本文的GIF动画均使用ScreenToGif进行录制。
#编辑器(Editor)vs集成开发环境(IntegratedDevelopmentEnvironment,下文简称IDE)
我经常看到一些程序员拿编辑器和IDE进行比较,诸如Vim比Eclipse强大或是VisualStudio太慢不如Notepad++好使之类的讨论比比皆是,个人认为这些讨论没有意义,因为编辑器和IDE根本是面向两种不同使用场景的工具:
1.编辑器面向无语义的纯文本,不涉及领域逻辑,因此速度快体积小,适合编写单独的配置文件和动态语言脚本(Shell、Python和Ruby等)。
2.IDE面向有语义的代码,会涉及到大量领域逻辑,因此速度偏慢体积庞大,适合编写静态语言项目(Java、C++和C#等)。
我认为应当使用正确的工具去做有价值的事情,并把效率最大化,所以我会用Eclipse编写Java项目,用Vim编写Shell,用SublimeText编写JavaScript/HTML/Python,用VisualStudio编写C#。
前言到此结束,下面进入正题。
#安装(Installation)
SublimeText官方网站提供了SublimeText各系统各版本的下载,目前SublimeText的最新版本是SublimeText3。这里以Windows版本的SublimeText安装为例。
注意在安装时勾选Addtoexplorercontextmenu,这样在右键单击文件时就可以直接使用SublimeText打开。
#添加SublimeText到环境变量
使用Win+R运行sysdm.cpl打开“系统属性”。
然后在“高级”选项卡里选择“环境变量”,编辑“Path”,增加SublimeText的安装目录(例如D:\ProgramFiles\SublimeText3)。
接下来你就可以在命令行里面利用subl命令直接使用SublimeText了:
sublfile::使用SublimeText打开file文件sublfolder::使用SublimeText打开folder文件夹subl.::使用SublimeText当前文件夹
#安装PackageControl
前文提到SublimeText支持大量插件,如何找到并管理这些插件就成了一个问题,PackageControl正是为了解决这个问题而出现的,利用它我们可以很方便的浏览、安装和卸载SublimeText中的插件。
进入PackageControl的官网,里面有详细的安装教程。PackageControl支持SublimeText2和3,本文只给出3的安装流程:
1.使用Ctrl+`打开SublimeText控制台。
2.将下面的代码粘贴到控制台里:
importurllib.request,os,hashlib;h='7183a2d3e96f11eeadd761d777e62404'+'e330c659d4bb41d3bdf022e94cab3cd0';pf='PackageControl.sublime-package';ipp=sublime.installed_packages_path();urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler()));by=urllib.request.urlopen('http://sublime.wbond.net/'+pf.replace('','%20')).read();dh=hashlib.sha256(by).hexdigest();print('Errorvalidatingdownload(got%sinsteadof%s),pleasetrymanualinstall'%(dh,h))ifdh!=helseopen(os.path.join(ipp,pf),'wb').write(by)
3.等待PackageControl安装完成。之后使用Ctrl+Shift+P打开命令板,输入PC应出现PackageControl:
成功安装PackageControl之后,我们就可以方便的安装使用SublimeText的各种插件:
#购买(Purchase)
SublimeText是一个收费闭源软件,这在一定程度上成为了我支持SublimeText的理由(我心中的软件靠谱程度:免费开源<<免费闭源<收费开源<收费闭源):在这里购买。
不过不购买SublimeText也可以“正常”使用它,只是SublimeText会时不时的弹出一个对话框提醒你购买,此外窗口处会有一个很屌丝很low逼的(UNREGISTERED)。(在高频操作下,一般20分钟提示一次,个人认为算是很厚道了)
也许不少人会觉着SublimeText70刀的价格太贵,但相比它的功能和带来的效率提升,70刀真的不值一提,如果你不方便使用Paypal付款可以邮件联系我,你支付宝给我打款然后我帮你付款,价格按当日汇率折算(450元左右)。
概览(Tour)
#基本概念(BasicConcepts)
SublimeText的界面如下:
1.标签(Tab):无需介绍。
2.编辑区(EditingArea):无需介绍。
3.侧栏(SideBar):包含当前打开的文件以及文件夹视图。
4.缩略图(Minimap):如其名。
5.命令板(CommandPalette):SublimeText的操作中心,它使得我们基本可以脱离鼠标和菜单栏进行操作。
6.控制台(Console):使用Ctrl+`调出,它既是一个标准的PythonREPL,也可以直接对SublimeText进行配置。
7.状态栏(StatusBar):显示当前行号、当前语言和Tab格式等信息。
#配置(Settings)
与其他GUI环境下的编辑器不同,SublimeText并没有一个专门的配置界面,与之相反,SublimeText使用JSON配置文件,例如:
{"font_size":12,"highlight_line":true,}
会将默认字体大小调整为12,并高亮当前行。
JSON配置文件的引入简化了SublimeText的界面,但也使得配置变的复杂,一般我会到这里查看可用的SublimeText配置。
#编辑(Editing)
SublimeText的编辑十分人性化——它不像Vim那样反人类(尽管我也用Vim但我还是要说Vim的快捷键设定绝壁连代谢产物都不如),少量的快捷键就可以完成绝大多数编辑任务。
#基本编辑(BasicEditing)
↑↓←→就是↑↓←→,不是KJHL,(没错我就是在吐槽Vim,尼玛设成WSAD也比这个强啊),粘贴剪切复制均和系统一致。
Ctrl+Enter在当前行下面新增一行然后跳至该行;Ctrl+Shift+Enter在当前行上面增加一行并跳至该行。
Ctrl+←/→进行逐词移动,相应的,Ctrl+Shift+←/→进行逐词选择。
Ctrl+↑/↓移动当前显示区域,Ctrl+Shift+↑/↓移动当前行。
#选择(Selecting)
SublimeText的一大亮点是支持多重选择——同时选择多个区域,然后同时进行编辑。
Ctrl+D选择当前光标所在的词并高亮该词所有出现的位置,再次Ctrl+D选择该词出现的下一个位置,在多重选词的过程中,使用Ctrl+K进行跳过,使用Ctrl+U进行回退,使用Esc退出多重编辑。
多重选词的一大应用场景就是重命名——从而使得代码更加整洁。尽管SublimeText无法像IDE(例如Eclipse)那样进行自动重命名,但我们可以通过多重选词+多重编辑进行直观且便捷的重命名:
有时我们需要对一片区域的所有行进行同时编辑,Ctrl+Shift+L可以将当前选中区域打散,然后进行同时编辑:
有打散自然就有合并,Ctrl+J可以把当前选中区域合并为一行:
#查找&替换(Finding&Replacing)
SublimeText提供了强大的查找(和替换)功能,为了提供一个清晰的介绍,我将SublimeText的查找功能分为快速查找、标准查找和多文件查找三种类型。
#快速查找&替换
多数情况下,我们需要查找文中某个关键字出现的其它位置,这时并不需要重新将该关键字重新输入一遍然后搜索,我们只需要使用Shift+←/→或Ctrl+D选中关键字,然后F3跳到其下一个出现位置,Shift+F3跳到其上一个出现位置,此外还可以用Alt+F3选中其出现的所有位置(之后可以进行多重编辑,也就是快速替换)。
#标准查找&替换
另一种常见的使用场景是搜索某个已知但不在当前显示区域的关键字,这时可以使用Ctrl+F调出搜索框进行搜索:
以及使用Ctrl+H进行替换:
#关键字查找&替换
对于普通用户来说,常规的关键字搜索就可以满足其需求:在搜索框输入关键字后Enter跳至关键字当前光标的下一个位置,Shift+Enter跳至上一个位置,Alt+Enter选中其出现的所有位置(同样的,接下来可以进行快速替换)。
SublimeText的查找有不同的模式:Alt+C切换大小写敏感(Case-sensitive)模式,Alt+W切换整字匹配(Wholematching)模式,除此之外SublimeText还支持在选中范围内搜索(Searchinselection),这个功能没有对应的快捷键,但可以通过以下配置项自动开启。
"auto_find_in_selection":true
这样之后在选中文本的状态下范围内搜索就会自动开启,配合这个功能,局部重命名(LocalRenaming)变的非常方便:
使用Ctrl+H进行标准替换,输入替换内容后,使用Ctrl+Shift+H替换当前关键字,Ctrl+Alt+Enter替换所有匹配关键字。
#正则表达式查找&替换
正则表达式是非常强大的文本查找&替换工具,SublimeText中使用Alt+R切换正则匹配模式的开启/关闭。SublimeText的使用Boost里的Perl正则表达式风格。
出于篇幅原因,本文不会对正则表达式进行详细介绍,MasteringRegex(中译本:精通正则表达式)对正则表达式的原理和各语言下的使用进行了详细介绍。此外网上有大量正则表达式的优秀教程(“正则表达式30分钟入门教程”和MSDN正则表达式教程.aspx)),以及在线测试工具(regexpal和regexer)。
#多文件搜索&替换
使用Ctrl+Shift+F开启多文件搜索&替换(注意此快捷键和搜狗输入法的简繁切换快捷键有冲突):
多文件搜索&替换默认在当前打开的文件和文件夹进行搜索/替换,我们也可以指定文件/文件夹进行搜索/替换。
#跳转(Jumping)
SublimeText提供了强大的跳转功能使得我们可以在不同的文件/方法/函数中无缝切换。就我的使用经验而言,目前还没有哪一款编辑器可以在这个方面超越SublimeText。
#跳转到文件
Ctrl+P会列出当前打开的文件(或者是当前文件夹的文件),输入文件名然后Enter跳转至该文件。
需要注意的是,SublimeText使用模糊字符串匹配(FuzzyStringMatching),这也就意味着你可以通过文件名的前缀、首字母或是某部分进行匹配:例如,EIS、Eclip和Stupid都可以匹配EclipseIsStupid.java。
#跳转到符号
尽管是一个文本编辑器,SublimeText能够对代码符号进行一定程度的索引。Ctrl+R会列出当前文件中的符号(例如类名和函数名,但无法深入到变量名),输入符号名称Enter即可以跳转到该处。
此外,还可以使用F12快速跳转到当前光标所在符号的定义处(JumptoDefinition)。
比较有意思的是,对于Markdown,Ctrl+R会列出其大纲,非常实用。
#跳转到某行
Ctrl+G然后输入行号以跳转到指定行:
#组合跳转
在Ctrl+P匹配到文件后,我们可以进行后续输入以跳转到更精确的位置:
1.@符号跳转:输入@symbol跳转到symbol符号所在的位置
2.#关键字跳转:输入#keyword跳转到keyword所在的位置
3.:行号跳转:输入:12跳转到文件的第12行。
所以SublimeText把Ctrl+P称之为“GoToAnything”,这个功能如此好用,以至于我认为没有其它编辑器能够超越它。
#中文输入法的问题
从SublimeText的初版(1.0)到现在(3.03065),中文输入法(包括日文输入法)都有一个问题:输入框不跟随。
目前官方还没有修复这个bug,解决方法是安装IMESupport插件,之后重启SublimeText问题就解决了。
#文件夹(Folders)
SublimeText支持以文件夹做为单位进行编辑,这在编辑一个文件夹下的代码时尤其有用。在File下OpenFolder:
你会发现右边多了一个侧栏,这个侧栏列出了当前打开的文件和文件夹的文件,使用Ctrl+K,Ctrl+B显示或隐藏侧栏,使用Ctrl+P快速跳转到文件夹里的文件。
#窗口&标签(Windows&Tabs)
SublimeText是一个多窗口多标签编辑器:我们既可以开多个SublimeText窗口,也可以在一个SublimeText窗口内开多个标签。
#窗口(Window)
使用Ctrl+Shift+N创建一个新窗口(该快捷键再次和搜狗输入法快捷键冲突,个人建议禁用所有搜狗输入法快捷键)。
当窗口内没有标签时,使用Ctrl+W关闭该窗口。
#标签(Tab)
使用Ctrl+N在当前窗口创建一个新标签,Ctrl+W关闭当前标签,Ctrl+Shift+T恢复刚刚关闭的标签。
编辑代码时我们经常会开多个窗口,所以分屏很重要。Alt+Shift+2进行左右分屏,Alt+Shift+8进行上下分屏,Alt+Shift+5进行上下左右分屏(即分为四屏)。
分屏之后,使用Ctrl+数字键跳转到指定屏,使用Ctrl+Shift+数字键将当前屏移动到指定屏。例如,Ctrl+1会跳转到1屏,而Ctrl+Shift+2会将当前屏移动到2屏。
#全屏(FullScreen)
SublimeText有两种全屏模式:普通全屏和无干扰全屏。
个人强烈建议在开启全屏前关闭菜单栏(ToggleMenu),否则全屏效果会大打折扣。
F11切换普通全屏:
Shift+F11切换无干扰全屏:
#风格(Styles)
风格对于任何软件都很重要,对编辑器也是如此,尤其是GUI环境下的编辑器。作为一个程序员,我希望我的编辑器足够简洁且足够个性。
Notepad++默认界面
SublimeText默认界面
所以在用过SublimeText之后,我立刻就卸掉了Notepad++。
SublimeText自带的风格是我喜欢的深色风格(也可以调成浅色),默认主题是MonokaiBright,这两者的搭配已经很不错了,不过我们还可以做得更好:接下来我将会展示如何通过设置偏好项和添加自定义风格/主题使得SublimeText更加Stylish。
#一些设置(MiscellaneousSettings)
下面是我个人使用的设置项。
设置之后的效果如下:
#主题(Themes)
SublimeText有大量第三方主题:[https://sublime.wbond.net/browse/labels/theme],这里我给出几个个人感觉不错的主题:
SodaLight
SodaDark
Nexus
Flatland
SpacegrayLight
SpacegrayDark
#配色(Color)
colorsublime包含了大量SublimeText配色方案,并支持在线预览,配色方案的安装教程在这里,恕不赘述。
我个人使用的是Nexus主题和FlatlandDark配色,配置如下:
"theme":"Nexus.sublime-theme","color_scheme":"Packages/Theme-Flatland/FlatlandDark.tmTheme",
效果如下:
#编码(Coding)
优秀的编辑器使编码变的更加容易,所以SublimeText提供了一系列功能以提高开发效率。
#良好实践(GoodPractices)
良好的代码应该是规范的,所以Google为每一门主流语言都设置了其代码规范(CodeStyleGuideline)。我自己通过下面的设置使以规范化自己的代码。
#代码段(CodeSnippets)
SublimeText支持代码段(CodeSnippet),输入代码段名称后Tab即可生成代码段。
你可以通过PackageControl安装第三方代码段,也可以自己创建代码段,参考这里。
#格式化(Formatting)
SublimeText基本的手动格式化操作包括:Ctrl+[向左缩进,Ctrl+]向右缩进,此外Ctrl+Shift+V可以以当前缩进粘贴代码(非常实用)。
除了手动格式化,我们也可以通过安装插件实现自动缩进和智能对齐:
1.HTMLBeautify:格式化HTML。
2.AutoPEP8:格式化Python代码。
3.Alignment:进行智能对齐。
#自动完成(AutoCompletion)
SublimeText支持一定的自动完成,按Tab自动补全。
#括号(Brackets)
编写代码时会碰到大量的括号,利用Ctrl+M可以快速的在起始括号和结尾括号间切换,Ctrl+Shift+M则可以快速选择括号间的内容,对于缩进型语言(例如Python)则可以使用Ctrl+Shift+J。
此外,我使用BracketHighlighter插件以高亮显示配对括号以及当前光标所在区域,效果如下:
#命令行(CommandLine)
尽管提供了Python控制台,但SublimeText的控制台仅支持单行输入,十分不方便,所以我使用SublimeREPL以进行一些编码实验(Experiments)。
#其它(Miscellaneous)
下面是一些可能有用但我很少用到的功能:
1.宏(Macro):SublimeText支持录制宏,但我在实际工作中并未发现宏有多大用处。
2.其它平台(OtherPlatforms):本文只介绍了Windows平台上SublimeText的使用,不过Linux和OSX上SublimeText的使用方式和Windows差别不大,只是在快捷键上有所差异,请参考Windows/Linux快捷键和OSX快捷键。
3.项目(Projects):SublimeText支持简单的项目管理,但我一般只用到文件夹。
4.Vim模式(Vintage):SublimeText自带Vim模式。
5.构建(Build):通过配置,SublimeText可以进行源码构建。
6.调试(Debug):通过安装插件,SublimeText可以对代码进行调试。
#快捷键列表(ShortcutsCheatsheet)
我把本文出现的SublimeText按其类型整理在这里,以便查阅。
通用(General)
1.↑↓←→:上下左右移动光标,注意不是不是KJHL!
2.Alt:调出菜单
3.Ctrl+Shift+P:调出命令板(CommandPalette)
4.Ctrl+`:调出控制台
#编辑(Editing)
1.Ctrl+Enter:在当前行下面新增一行然后跳至该行
2.Ctrl+Shift+Enter:在当前行上面增加一行并跳至该行
3.Ctrl+←/→:进行逐词移动
4.Ctrl+Shift+←/→进行逐词选择
5.Ctrl+↑/↓移动当前显示区域
6.Ctrl+Shift+↑/↓移动当前行
#选择(Selecting)
1.Ctrl+D:选择当前光标所在的词并高亮该词所有出现的位置,再次Ctrl+D选择该词出现的下一个位置,在多重选词的过程中,使用Ctrl+K进行跳过,使用Ctrl+U进行回退,使用Esc退出多重编辑
2.Ctrl+Shift+L:将当前选中区域打散
3.Ctrl+J:把当前选中区域合并为一行
4.Ctrl+M:在起始括号和结尾括号间切换
5.Ctrl+Shift+M:快速选择括号间的内容
6.Ctrl+Shift+J:快速选择同缩进的内容
7.Ctrl+Shift+Space:快速选择当前作用域(Scope)的内容
#查找&替换(Finding&Replacing)
1.F3:跳至当前关键字下一个位置
2.Shift+F3:跳到当前关键字上一个位置
3.Alt+F3:选中当前关键字出现的所有位置
4.Ctrl+F/H:进行标准查找/替换,之后:
5.Alt+C:切换大小写敏感(Case-sensitive)模式
6.Alt+W:切换整字匹配(Wholematching)模式
7.Alt+R:切换正则匹配(Regexmatching)模式
8.Ctrl+Shift+H:替换当前关键字
9.Ctrl+Alt+Enter:替换所有关键字匹配
10.Ctrl+Shift+F:多文件搜索&替换
#跳转(Jumping)
1.Ctrl+P:跳转到指定文件,输入文件名后可以:
2.@符号跳转:输入@symbol跳转到symbol符号所在的位置
3.#关键字跳转:输入#keyword跳转到keyword所在的位置
4.:行号跳转:输入:12跳转到文件的第12行。
5.Ctrl+R:跳转到指定符号
6.Ctrl+G:跳转到指定行号
#窗口(Window)
1.Ctrl+Shift+N:创建一个新窗口
2.Ctrl+N:在当前窗口创建一个新标签
3.Ctrl+W:关闭当前标签,当窗口内没有标签时会关闭该窗口
4.Ctrl+Shift+T:恢复刚刚关闭的标签
#屏幕(Screen)
1.F11:切换普通全屏
2.Shift+F11:切换无干扰全屏
3.Alt+Shift+2:进行左右分屏
4.Alt+Shift+8:进行上下分屏
5.Alt+Shift+5:进行上下左右分屏
6.分屏之后,使用Ctrl+数字键跳转到指定屏,使用Ctrl+Shift+数字键将当前屏移动到指定屏