能无人机、自主机器人、智能摄像机、自动驾驶……今年最令硬件创客们着迷的词汇,想必就是这些一线“网红”了。而这些网红的背后,几乎都和计算机视觉与深度学习密切相关。
深度学习是人工智能领域一个最新的分支,可以帮助计算机理解图像、声音和文本,但需要强大的数据处理能力作为支撑。
NVIDIA Jetson TX1
在今年的Embedded World、SX Create、FIRST Championship等大型活动中,你都可以看到很多小型团队或者创业公司,所打造的应用了深度学习技术的机器人和无人机系统。一套套完美的解决方案,背后都有一个共同点——NVIDIA JetsonTX1!
如果说Arduino或者树梅派是很多创客们此前的最爱,那么Jetson TX1就是今年他们眼中的最酷“玩具”!
GoPro自动目标跟踪
观看视频点击链接:http://v.qq.com/x/page/b0309rmqniy.html
创客们对Jetson兴趣十足,比如上面这个就是基于Jetson TX1,以GoPro为基础,实现了运动拍摄中的目标自动跟踪
什么是Jetson TX1
Jetson TX1是NVIDIA第二代嵌入式平台开发者套件,虽然只有信用卡大小,但Jetson TX1 GPU模块的浮点运算能力却达到1 Teraflops,相比Jetson TK1有巨幅提升。如此强大的性能,Jetson TX1显然是智能无人机、机器人最理想的嵌入式解决方案。
Jetson TX1 核心模块
别看核心模块只有信用卡大小,身体里可暗藏玄机:内建256个CUDA核心的NVIDIA Maxwell GPU,64位ARM A57 CPU,4GB LPDDR4内存、16GB闪存、蓝牙、802.11ac Wi-Fi模块和千兆以太网卡,运行Linux for Tegra操作系统。
Jetson TX1 开发者套件
配上坐骑后的Jetson TX1是这个样子的。主板提供了USB 3.0 Type A、USB 2.0、HDMI、M.2 Key E、PCI-E x4、千兆以太网、SD、SATA数据和供电等接口,俨然是台全功能的PC;既然是开发者套件,怎能少了针对硬件创客的扩展接口:GPIO、I2C、I2S、SPI、带流控制的TTL UART、显示器扩展头和摄像头扩展头一个不少。
Jetson TX1 开发者套件内容详情
作为上一代Jetson TK1的用户,自然不会放过性能如此强悍的Jetson TX1。经过了一段时间的使用和体验,这里向大家分享一下粗浅的使用体验,同时以个人观点聊聊Jetson TX1到底能为我们带来哪些想象空间!
开箱体验与基本使用
1、开箱体验
Jetson TX1自带了底座,十分贴心。虽然包装盒内没有附带任何光盘等介质,但Jetson TX1线上资源十分丰富,囊括文档及软件工具,并且获取十分方便。
Jetson TX1 开发者套件庐山真面目
Jetson TX1模块已预先安装在主板上,Wi-Fi天线连接线也已接好,同时整个核心模块由一个巨大的散热片覆盖,并配备了风扇,为了保证系统运行稳定和兼顾控制能耗,按照系统设定,该风扇仅在系统高负荷运行时才会启动,平时系统主要依靠散热片被动散热,由此可见NVIDIA在保证系统稳定并兼顾控制能耗上的细致,毕竟这样一块计算能力达到1 Teraflops的Jetson TX1,功耗峰值才10W。
Jetson TX1与Jetson TK1
由于配备了更多的扩展接口,所以Jetson TX1比Jetson TK1主板面积要大一些。较大的外形也暗示着TX1拥有的更强性能和带给开发者的想象空间。
2、开发环境搭建
在正式进入Jetson TX1开发的奇幻之旅前,先简单介绍一下Jetson TX1开发环境的配置,在这里我们需要预先准备下列项目:
NVIDIA开发者账号
该账号需要在NVIDIA官网的开发者页面进行注册,并同时加入“Embedded Development Program”。这样就可以获取Jetson TX1相关的全部文档和软件包资源,包括嵌入式系统镜像、开发工具以及NVIDIA提供的各种工具和软件库。
注册NVIDIA开发者帐号并加入“Embedded Development Program”
NVIDIA为开发者提供了涵盖Jetson TX1方方面面的文档资源和软件资源
Jetson TX1相关的文档和软件工具都可以通过Embedded Download Center下载
安装妥当的Jetson TX1
正确的电源、鼠标、键盘,网络和显示器连接。Jetson TX1开发套件提供了2个USB接口,包括一个USB 2.0 Micro,虽然通过转接器可以连接标准USB接口的设备,但是开发过程中经常需要将Jetson TX1通过USB连接至Host电脑,所以这里我推荐大家可以使用USB 3.0 HUB来解决USB接口不足的问题。
安装妥当的Jetson TX1
JetPack开发工具套件
可以登录NVIDIA EmbeddedDownload Center下载。
一台运行Ubuntu Linux 64位操作系统的Host电脑
操作系统推荐使用Ubuntu 14.04 LTS64位版本,同时至少有10GB硬盘空闲空间。
准备完毕后,在Host电脑为JetPack安装包增加运行权限并执行,JetPack安装程序将通过图形界面引导开发者完成开发环境的配置,开发者只需依照自己的开发配置在安装程序的引导下做出选择即可,整个过程非常简约,界面友好。
值得注意的是JetPack安装程序不仅可以在Host电脑和Jetson TX1上搭建开发环境,同时还可以对Jetson TX1进行刷机,用来恢复出场设置和升级最新的操作系统版本,使用JetPack刷机比用命令行工具更加简便和不易出错。
在Host电脑上为JetPack安装包添加运行权限并执行
全程只需要依据安装引导进行配置即可
在Jetson TX1上测试开发编译环境是否安装成功
运行/开发环境初探
运行环境方面,JetPack搭建好开发环境后,Jetson TX1将重启并引导之图形界面。目前Jetson TX1上最新的操作系统为Linux For Tegra R24.1,该操作系统在用于ARM架构的Ubuntu 14.04 LTS版本基础上定制开发。Ubuntu在国内拥有庞大的用户基础和社区环境,基于Ubuntu定制开发的Linux For Tegra对于发者们来说,在界面,命令和操作习惯等方面非常熟悉,极易上手;与此同时,开发者使用过程中遇到的问题,除了官方论坛外,也可以在更广泛的Ubuntu操作系统社区环境内向众大神寻求帮助。
Jetson TX1操作系统 Linux for Tegra概览
一般来说,针对嵌入式平台的开发有两种编译模式:原生编译和交叉编译。原生编译就是直接在嵌入式平台上编译代码并运行,而交叉编译就是在个人电脑等平台编译代码,然后加载到嵌入式平台运行。我们在Jetson TX1开发上使用交叉编译。这里需要提醒一下各位小伙伴,交叉编译需要在Jetson TX1和Host电脑间同步代码,所以需要提前安装和配置Git,否则在后续编译执行的时候会报错的呦,开发工具会深情地问你“Can you tell me who you are”。
NVDIA Nsight启动界面
NVDIA Nsight操作界面
Jetson TX1使用的开发工具NVDIA Nsight是基于eclipse定制开发,其界面和操作习惯于eclipse基本保持一致,消除了开发人员的熟悉工具的时间和精力消耗。
接下来分享下在Jetson TX上创建,编辑,生成和运行一个项目的过程。
新建项目
NVIDIA Nsight新建项目中目标系统设置
由于使用交叉编译模式,所以在新建项目时,需要指定目标系统,即实际编译运行程序的系统——Jetson TX1。这里按提示输入Jetson TX1的网络地址,用户名,以及Jetson TX1上CUDA Toolkit的安装路径就可以了。
如果不知道Jetson TX1上CUDA Toolkit的路径也没有关系,新建项目向导很贴心的设置了一个“自动检测”的功能,只要轻轻一点,向导会自动搜寻CUDA Toolkit的路径,非常方便。
编辑代码
NVIDIA Nsight代码编辑视图
NVIDIA Nsight代码编辑与eclipse完全一致,只是增加针对CUDA代码的代码补全,高亮提示以及语法检查,用惯eclipse的开发者绝对能感觉到屠龙在手,天下我有。
生成/运行项目
NVIDIA Nsight远程运行项目对话框
同样的,在按照工具的提示配置好Jetson TX1后,就可以完成程序的编译,运行,然后坐等收获结果!
软硬件配置概览
在简单介绍了Jetson TX1以及它的开发环境后,现在从Jetson TX1的软硬件配置入手,来探索Jetson TX1开发者套件带给广大开发者的无限可能。
CUDA
CUDA是整套平台的核心,保证了Jetson TX1超高的计算性能。同时,Jetson TX1也支持各种基于CUDA跨架的软件库,从而可以用于多种高并行度计算和高数据密度的应用场景,如机器学习,深度学习,大数据实施分析以及物联网边缘计算等。
GPIO、I2C、I2S、SPI、带流控制的TTL UART等接口
丰富的接口给了今后基于Jetson TX1进行扩展开发的无限可能,即可以通过TTL UART、GPIO等接口实现其它单片机、嵌入式系统的所有功能外,还能通过自身强大的性能,升任其它单片机、嵌入式系统,如树梅派等无力支撑的高数据密度业务和高处理实时性业务,如智能机器人,机器人,无人驾驶汽车等。
摄像头扩展头
通过将摄像头(最高支持4K)与Jetson TX1连接,并借助OpenCV和Visionworks进行视觉计算。
PCIe x4接口
这使得Jetson TX1与其它扩展板卡得以结合,并碰撞出创新的火花。如可以通过PCIe x4接口将可编程的FPGA接入系统,协助处理通信,加解密等业务,从而进一步提升Jetson TX1针对特殊应用场景的性能。
USB 2.0 Client/Host接口
USB2.0 Client/Host口也为很多应用提供便利。一方面通过USB Host可以将各种USB外设连接在Jetson TX1上,此外,也可以通过 USB Client 将Jetson TX1作为外设连接至电脑或其它设备,开发者完全可以随意定义这个USB Client的具体行为和功能,即可以将Jetson TX1开发为具备任何希望功能的外设连接至电脑或其它设备。
初步的使用感受
在基础开发环境配置过程中,最令人映像深刻的感受有以下两点:
Jetson TX1规格
NVIDIA提供的工具软件包强大且易用
首先,JetPack为用户提供了从Jetson TX1系统镜像烧录,到Jetson TX1和Host电脑开发环境安装配置的一站式解决方案,省去了用户用在分别安装、配置各个组件,解决版本匹配和组件间依赖关系上的时间和精力,使用户可以方便快捷的完成环境的准备,并将精力集中在产品的研发上。相比之下,我之前在PC和其他嵌入式平台上,往往总要在环境配置上耗费很多时间,需要想方设法地去解决组件版本不匹配和软件依赖关系不满足等问题。
其次,JetPack在安装配置过程中向用户提供了非常详尽的操作引导,使用户,尤其是新手可以很顺利的完成基础环境的配置。例如在Jetson TX1操作系统映像烧录过程开始时,安装程序会弹出提示窗口,详细的介绍了如何将Jetson TX1设置为recovery模式以及相应的注意事项,并要求用户确认准备妥当后按键继续,最大程度的避免了用户操作不当造成的系统损坏;再例如在配置Jetson TX1软件环境时,安装程序会以图示的形式让用户选择Jetson TX1与Host电脑的连接方式,直观易懂。
Jetson TX1开发套件
Jetson TX1相关的辅助资源非常丰富
NVIDIA围绕Jetson TX1提供了从用户手册,产品设计文档,到工具软件和内核源码等全套资料,便于不同水平的用户查阅;同时还有专门针对Jetson嵌入式平台的开发者论坛,方便用户针对文档中未涉及的问题和使用经验进行提问和交流,NVIDIA的官方支持人员也会在论坛中回复大家提出的各种技术问题,为用户的开发过程提供有力支持。在本次编译环境的配置过程中,我就曾遇到交叉编译报错,eclipse提示在Jetson TX1上找不到对应路径的问题,当时查阅了很多文档但都没有找到问题所在,最终在开发者论坛中通过查阅开发者的历史提问找到的问题所在,是Jetson TX1端的Git没有正确配置,最终配置好Git后,编译错误也迎刃而解。
Jetson TX1凭借强悍的计算性能,相对超低的能耗,丰富的文档和资源和多样化的扩展接口,得以成为开发者和创客们的有力工具。后面,作者还将深入到不同的应用场景,深入探索Jetson TX1究竟如何帮助开发者实现无限可能,敬请期待!
者 | Hugo Di Francesco
译者 | 无明
Visual Studio Code 结合了轻量级文本编辑器的易用性和大型 IDE 风格的功能,只需要极少的配置,但充其量也只能说它“还凑合”。
在过去的几年,我做了很多 PHP、JavaScript 以及其他与 Web 相关的开发工作(HTML、CSS、React、Python、Ruby)。对于开发人员来说,代码编辑器是工具箱中最重要的组成部分之一。好的编辑器可以保护你的手腕和手指免受重复性劳损的伤害,在经历长时间的编码之后,它可以让你的眼睛免受失明的风险。
与其他 Web 开发人员一样,我也是从 Sublime 开始的。当时,代码编辑器领域的竞争还没有这么激烈。当 Atom 变得更加成熟时,我转向了 Atom。我很快就在 Atom 中使用 Nuclide 来协助 React 和 PHP 开发。我还使用过 VIM。我也尝试了 Eclipse 和 IntelliJ 一小段时间,但我已经习惯了 Atom 和 Sublime 的按键绑定,所以感觉 Eclipse 和 IntelliJ 的不太好用。这就是我的编辑器选择之旅。作为开发人员,我们有时喜欢走很长的路。我的意思是,它毕竟只是一款编辑器,又何必要如此煞费苦心呢?
我最新的代码编辑器冒险之旅是 Visual Studio Code。它带来了 IDE 风格的功能,不仅具有经典轻量级代码编辑器的简单性,还提供了一些我想要但 Atom 可能永远不会提供的功能。
它是跨平台的,并且是免费和开源的,可以在这里下载到:
https://code.visualstudio.com/
VSCode 的 GUI 设计与 Atom 或 Sublime 完全不同,它从一个突出的侧边栏开始:
侧边栏包含了以下项目:
你可以通过这个菜单进行搜索,并查找能够满足你需求的扩展程序。我从来不在 Atom 中使用扩展搜索,但因为 VSCode 的扩展功能如此突出,我还是通过菜单安装了一些扩展程序。
你似乎总能看到你需要使用的功能,你不需要知道所有的键盘快捷键才能成为高级用户。
VSCode 提供了开箱即用的“JavaScript、TypeScript、JSON、HTML、CSS、Less 和 Sass”智能感知,这一点很不错。在 Atom 中,我并没有使用代码提示插件,所以 VSCode 的智能感知显得有点啰嗦,不过,这也是我之前错过的东西。它会根据你安装的扩展程序告诉你代码的哪些部分是无效的。例如,当代码中的每个 const 都被标记为错误时,你就该知道它不支持 ES6。
当你意识到需要安装 ES6 插件时,它会根据当前的 workspace 向你推荐扩展程序,例如,对于 ES5/ES6,它会建议安装“Babel ES6/ES7”扩展程序。这比在网上寻找安装哪个插件要好得多。
VSCode 的生态系统还没有那么碎片化,可能是因为它还比较新。对于某项任务,通常只有一个包可用(比如用于 ES6 高亮和提示的包)。
我老是记不住分屏的快捷键。VSCode 在打开文档选项卡的右上角提供了一个图标,可用它来切换屏幕模式。我会在编写测试代码时用到它,也就是说,我可以同时打开应用程序代码和测试代码。在将代码从一个框架(或语言)移植到另一个框架(或语言)时,这个功能也很有用。
我从来不知道还能这么做。为了偶尔用到的功能记住一个快捷键并不会带来多大帮助,但是有了这个功能,就可以让我避免老是来回切换选项卡。这样可以减少上下文切换,更好的注意力聚焦可以提高生产力。
我没有使用 git GUI,这对我来说通常不是一个大问题。在终端中使用大多数 git 命令(pull、commit、add、status、rebase)都没有问题,只是 git diff 不太好用。VSCode 提供了 diff 视图,我因此可以编写更好的提交日志消息,因为现在可以看到每个文件的全部代码差异,而不是像以前那样运行 git diff,然后还有记住使用 git commit 时 diff 中都包含了哪些内容。
我从不在 Atom 中使用单击导入包,因为用得不多。但一旦用到了,你就会觉得无需重新输入文件名这一点其实是很棒的。
我会对 Atom 和 iTerm 进行分屏。但事实证明,iTerm 用得并不多。在 VSCode 中,你只需要使用 cmd +或 ctrl +就可以召唤出终端。
能够查看类型函数定义是非常有用的。之前,如果忘记一个函数(比如 PHP 中的 array_push)的参数顺序是怎样的,我都需要去查找 API 文档。现在,VSCode 可以直接告诉我应该按照怎样的顺序传递参数,那么我就可以继续专注于手头的任务。
你还可以按住 cmd 或 ctrl 键来查看自己定义的变量和导入的引用。
所有这些功能都有一些共同点:它们是开发工作流程的一部分,但不会一直被用到。当你需要使用它们时,它们就能帮助你提高工作效率。
VSCode 具有很高的定制化能力和可扩展性,以下这些是我目前安装过的一些插件:
VSCode 是跨平台、免费和开源的。即使你是一个顽固的 Atom 或 Sublime 粉丝,也要试一试 VSCode。它可能会让你大吃一惊。
英文原文
https://hackernoon.com/virtualstudio-code-the-editor-i-didnt-think-i-needed-16970c8356d5
者:lucida
链接:http://lucida.me/blog/sublime-text-complete-guide/
本文系统全面的介绍了 Sublime Text,旨在成为最优秀的 Sublime Text 中文教程。
1.2014/09/27:完成初稿
2.2014/09/28:
更正打开控制台的快捷键为 Ctrl + `
更正全局替换的快捷键为 Ctrl + Alt + Enter
3.2016/09/15:作者已全面转向 Visual Studio Code
Sublime Text 是一款跨平台代码编辑器(Code Editor),从最初的 Sublime Text 1.0,到现在的 Sublime Text 3.0,Sublime Text 从一个不知名的编辑器演变到现在几乎是各平台首选的 GUI 编辑器。而这样优秀的编辑器却没有一个靠谱的中文教程,所以我试图通过本文弥补这个缺陷。
从初学编程到现在,我用过的编辑器有 EditPlus、UltraEdit、Notepad++、Vim、TextMate 和 Sublime Text,如果让我从中推荐,我会毫不犹豫的推荐 Vim 和 Sublime Text,原因有下面几点:
1.跨平台:Vim 和 Sublime Text 均为跨平台编辑器(在 Linux、OS X 和 Windows 下均可使用)。作为一个程序员,切换系统是常有的事情,为了减少重复学习,使用一个跨平台的编辑器是很有必要的。
2.可扩展:Vim 和 Sublime Text 都是可扩展的(Extensible),并包含大量实用插件,我们可以通过安装自己领域的插件来成倍提高工作效率。
3.互补:Vim 和 Sublime Text 分别是命令行环境(CLI)和图形界面环境(GUI)下的最佳选择,同时使用两者会大大提高工作效率。
我是一名非常典型的程序员:平时工作主要在 Linux 环境下使用 Java 和 Python,偶尔会用 HTML+CSS+JavaScript 编写网页;业余时会在 Windows 环境编写一些 C# 程序(包括控制台程序(Console Application)和移动应用(Mobile App),也会玩一些非主流语言(比如 Haskell,ML 和 Ruby 等)以拓展见识。
所以这篇文章会我的个人工作内容为主要使用场景(Scenario),尽管无法覆盖到所有的使用场景,但我认为依然可以覆盖到绝大部分,如果您认为我遗漏了什么内容,请在文章下面回复,我会尽量更新。
受益于 K&R C 的写作风格,我倾向于以实际案例来讲解 Sublime Text 的功能,所以本文中的例子均源于我在实际开发时遇到的问题。
此外,把本文会使用大量动画(GIF)演示 Sublime Text 的编辑功能,因为我发现图片难以演示完整的编辑流程(Workflow),而视频又过于重量级。本文的GIF动画均使用 ScreenToGif 进行录制。
我经常看到一些程序员拿编辑器和 IDE 进行比较,诸如 Vim 比 Eclipse 强大或是 Visual Studio 太慢不如 Notepad++ 好使之类的讨论比比皆是,个人认为这些讨论没有意义,因为编辑器和 IDE 根本是面向两种不同使用场景的工具:
1.编辑器面向无语义的纯文本,不涉及领域逻辑,因此速度快体积小,适合编写单独的配置文件和动态语言脚本(Shell、Python 和 Ruby 等)。
2.IDE 面向有语义的代码,会涉及到大量领域逻辑,因此速度偏慢体积庞大,适合编写静态语言项目(Java、C++ 和 C# 等)。
我认为应当使用正确的工具去做有价值的事情,并把效率最大化,所以我会用 Eclipse 编写 Java 项目,用 Vim 编写Shell,用 Sublime Text 编写 JavaScript/HTML/Python,用 Visual Studio 编写C#。
前言到此结束,下面进入正题。
Sublime Text 官方网站 提供了 Sublime Text 各系统各版本的下载,目前Sublime Text 的最新版本是 Sublime Text 3。这里以 Windows 版本的 Sublime Text 安装为例。
注意在安装时勾选 Add to explorer context menu,这样在右键单击文件时就可以直接使用 Sublime Text 打开。
使用 Win + R 运行 sysdm.cpl 打开 “系统属性”。
然后在 “高级” 选项卡里选择 “环境变量”,编辑 “Path”,增加 Sublime Text 的安装目录(例如 D:\Program Files\Sublime Text 3)。
接下来你就可以在命令行里面利用 subl 命令直接使用 Sublime Text 了:
subl file :: 使用 Sublime Text 打开 file 文件
subl folder :: 使用 Sublime Text 打开 folder 文件夹
subl . :: 使用 Sublime Text 当前文件夹
前文提到 Sublime Text 支持大量插件,如何找到并管理这些插件就成了一个问题,Package Control 正是为了解决这个问题而出现的,利用它我们可以很方便的浏览、安装和卸载 Sublime Text 中的插件。
进入 Package Control 的 官网,里面有详细的 安装教程。Package Control 支持 Sublime Text 2 和 3,本文只给出 3 的安装流程:
1.使用 Ctrl + ` 打开 Sublime Text 控制台。
2.将下面的代码粘贴到控制台里:
import?urllib.request,os,hashlib;?h?=?'7183a2d3e96f11eeadd761d777e62404'?+?'e330c659d4bb41d3bdf022e94cab3cd0';?pf?=?'Package?Control.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('Error?validating?download?(got?%s?instead?of?%s),?please?try?manual?install'?%?(dh,?h))?if?dh?!=?h?else?open(os.path.join(?ipp,?pf),?'wb'?).write(by)
3.等待 Package Control 安装完成。之后使用 Ctrl + Shift + P 打开命令板,输入 PC 应出现 Package Control:
成功安装 Package Control 之后,我们就可以方便的安装使用 Sublime Text 的各种插件:
Sublime Text 是一个收费闭源软件,这在一定程度上成为了我支持 Sublime Text 的理由(我心中的软件靠谱程度:免费开源 << 免费闭源 < 收费开源 < 收费闭源):在 这里 购买。
不过不购买 Sublime Text 也可以 “正常” 使用它,只是 Sublime Text 会时不时的弹出一个对话框提醒你购买,此外窗口处会有一个很屌丝很 low 逼的 (UNREGISTERED)。(在高频操作下,一般 20 分钟提示一次,个人认为算是很厚道了)
也许不少人会觉着 Sublime Text 70 刀的价格太贵,但相比它的功能和带来的效率提升,70 刀真的不值一提,如果你不方便使用 Paypal 付款可以邮件联系我,你支付宝给我打款然后我帮你付款,价格按当日汇率折算(450 元左右)。
Sublime Text 的界面如下:
1.标签(Tab):无需介绍。
2.编辑区(Editing Area):无需介绍。
3.侧栏(Side Bar):包含当前打开的文件以及文件夹视图。
4.缩略图(Minimap):如其名。
5.命令板(Command Palette):Sublime Text 的操作中心,它使得我们基本可以脱离鼠标和菜单栏进行操作。
6.控制台(Console):使用 Ctrl + ` 调出,它既是一个标准的 Python REPL,也可以直接对 Sublime Text 进行配置。
7.状态栏(Status Bar):显示当前行号、当前语言和Tab格式等信息。
与其他 GUI 环境下的编辑器不同,Sublime Text 并没有一个专门的配置界面,与之相反,Sublime Text 使用 JSON 配置文件,例如:
{
"font_size": 12,
"highlight_line": true,
}
会将默认字体大小调整为 12,并高亮当前行。
JSON 配置文件的引入简化了 Sublime Text 的界面,但也使得配置变的复杂,一般我会到 这里 查看可用的 Sublime Text 配置。
Sublime Text 的编辑十分人性化——它不像 Vim 那样反人类(尽管我也用 Vim 但我还是要说 Vim 的快捷键设定绝壁连代谢产物都不如),少量的快捷键就可以完成绝大多数编辑任务。
↑↓←→ 就是 ↑↓←→,不是 KJHL,(没错我就是在吐槽 Vim,尼玛设成 WSAD 也比这个强啊),粘贴剪切复制均和系统一致。
Ctrl + Enter 在当前行下面新增一行然后跳至该行;Ctrl + Shift + Enter 在当前行上面增加一行并跳至该行。
Ctrl + ←/→ 进行逐词移动,相应的,Ctrl + Shift + ←/→ 进行逐词选择。
Ctrl + ↑/↓ 移动当前显示区域,Ctrl + Shift + ↑/↓ 移动当前行。
Sublime Text 的一大亮点是支持多重选择——同时选择多个区域,然后同时进行编辑。
Ctrl + D 选择当前光标所在的词并高亮该词所有出现的位置,再次 Ctrl + D 选择该词出现的下一个位置,在多重选词的过程中,使用 Ctrl + K 进行跳过,使用 Ctrl + U 进行回退,使用 Esc 退出多重编辑。
多重选词的一大应用场景就是重命名——从而使得代码更加整洁。尽管 Sublime Text 无法像 IDE(例如 Eclipse)那样进行自动重命名,但我们可以通过多重选词+多重编辑进行直观且便捷的重命名:
有时我们需要对一片区域的所有行进行同时编辑,Ctrl + Shift + L 可以将当前选中区域打散,然后进行同时编辑:
有打散自然就有合并,Ctrl + J 可以把当前选中区域合并为一行:
Sublime Text 提供了强大的查找(和替换)功能,为了提供一个清晰的介绍,我将 Sublime Text 的查找功能分为 快速查找、标准查找 和 多文件查找 三种类型。
多数情况下,我们需要查找文中某个关键字出现的其它位置,这时并不需要重新将该关键字重新输入一遍然后搜索,我们只需要使用 Shift + ←/→ 或 Ctrl + D 选中关键字,然后 F3 跳到其下一个出现位置, Shift + F3 跳到其上一个出现位置,此外还可以用 Alt + F3 选中其出现的所有位置(之后可以进行多重编辑,也就是快速替换)。
另一种常见的使用场景是搜索某个已知但不在当前显示区域的关键字,这时可以使用 Ctrl + F 调出搜索框进行搜索:
以及使用 Ctrl + H 进行替换:
对于普通用户来说,常规的关键字搜索就可以满足其需求:在搜索框输入关键字后 Enter 跳至关键字当前光标的下一个位置, Shift + Enter 跳至上一个位置, Alt + Enter 选中其出现的所有位置(同样的,接下来可以进行快速替换)。
Sublime Text 的查找有不同的模式:Alt + C 切换大小写敏感(Case-sensitive)模式, Alt + W 切换整字匹配(Whole matching)模式,除此之外Sublime Text还支持在选中范围内搜索(Search in selection),这个功能没有对应的快捷键,但可以通过以下配置项自动开启。
"auto_find_in_selection": true
这样之后在选中文本的状态下范围内搜索就会自动开启,配合这个功能,局部重命名(Local Renaming)变的非常方便:
使用 Ctrl + H 进行标准替换,输入替换内容后,使用 Ctrl + Shift + H 替换当前关键字, Ctrl + Alt + Enter 替换所有匹配关键字。
正则表达式 是非常强大的文本查找&替换工具,Sublime Text中使用 Alt + R 切换正则匹配模式的开启/关闭。Sublime Text的使用Boost里的Perl正则表达式风格。
出于篇幅原因,本文不会对正则表达式进行详细介绍,Mastering Regex(中译本:精通正则表达式)对正则表达式的原理和各语言下的使用进行了详细介绍。此外网上有大量正则表达式的优秀教程(“正则表达式30分钟入门教程” 和 MSDN正则表达式教程.aspx)),以及在线测试工具(regexpal 和 regexer)。
使用 Ctrl + Shift + F 开启多文件搜索&替换(注意此快捷键和搜狗输入法的简繁切换快捷键有冲突):
多文件搜索&替换默认在当前打开的文件和文件夹进行搜索/替换,我们也可以指定文件/文件夹进行搜索/替换。
Sublime Text 提供了强大的跳转功能使得我们可以在不同的文件/方法/函数中无缝切换。就我的使用经验而言,目前还没有哪一款编辑器可以在这个方面超越Sublime Text。
Ctrl + P 会列出当前打开的文件(或者是当前文件夹的文件),输入文件名然后 Enter 跳转至该文件。
需要注意的是,Sublime Text使用模糊字符串匹配(Fuzzy String Matching),这也就意味着你可以通过文件名的前缀、首字母或是某部分进行匹配:例如, EIS 、 Eclip 和 Stupid 都可以匹配 EclipseIsStupid.java 。
尽管是一个文本编辑器,Sublime Text 能够对代码符号进行一定程度的索引。Ctrl + R 会列出当前文件中的符号(例如类名和函数名,但无法深入到变量名),输入符号名称 Enter 即可以跳转到该处。
此外,还可以使用 F12 快速跳转到当前光标所在符号的定义处(Jump to Definition)。
比较有意思的是,对于 Markdown, Ctrl + R 会列出其大纲,非常实用。
Ctrl + G 然后输入行号以跳转到指定行:
# 组合跳转
在 Ctrl + P 匹配到文件后,我们可以进行后续输入以跳转到更精确的位置:
1.@ 符号跳转:输入 @symbol 跳转到 symbol 符号所在的位置
2.# 关键字跳转:输入 #keyword 跳转到 keyword 所在的位置
3.: 行号跳转:输入 :12 跳转到文件的第12行。
所以 Sublime Text 把 Ctrl + P 称之为 “Go To Anything”,这个功能如此好用,以至于我认为没有其它编辑器能够超越它。
从 Sublime Text 的初版(1.0)到现在(3.0 3065),中文输入法(包括日文输入法)都有一个问题:输入框不跟随。
目前官方还没有修复这个 bug,解决方法是安装 IMESupport 插件,之后重启 Sublime Text 问题就解决了。
Sublime Text 支持以文件夹做为单位进行编辑,这在编辑一个文件夹下的代码时尤其有用。在 File 下 Open Folder :
你会发现右边多了一个侧栏,这个侧栏列出了当前打开的文件和文件夹的文件,使用 Ctrl + K, Ctrl + B 显示或隐藏侧栏,使用 Ctrl + P 快速跳转到文件夹里的文件。
Sublime Text 是一个多窗口多标签编辑器:我们既可以开多个Sublime Text窗口,也可以在一个Sublime Text窗口内开多个标签。
使用 Ctrl + Shift + N 创建一个新窗口(该快捷键再次和搜狗输入法快捷键冲突,个人建议禁用所有搜狗输入法快捷键)。
当窗口内没有标签时,使用 Ctrl + W 关闭该窗口。
使用 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屏。
Sublime Text 有两种全屏模式:普通全屏和无干扰全屏。
个人强烈建议在开启全屏前关闭菜单栏(Toggle Menu),否则全屏效果会大打折扣。
F11 切换普通全屏:
Shift + F11 切换无干扰全屏:
风格对于任何软件都很重要,对编辑器也是如此,尤其是GUI环境下的编辑器。作为一个程序员,我希望我的编辑器足够简洁且足够个性。
Notepad++ 默认界面
Sublime Text 默认界面
所以在用过 Sublime Text 之后,我立刻就卸掉了 Notepad++。
Sublime Text 自带的风格是我喜欢的深色风格(也可以调成浅色),默认主题是Monokai Bright,这两者的搭配已经很不错了,不过我们还可以做得更好:接下来我将会展示如何通过设置偏好项和添加自定义风格/主题使得 Sublime Text 更加 Stylish。
下面是我个人使用的设置项。
设置之后的效果如下:
Sublime Text 有大量第三方主题:[https://sublime.wbond.net/browse/labels/theme],这里我给出几个个人感觉不错的主题:
Soda Dark
colorsublime 包含了大量 Sublime Text 配色方案,并支持在线预览,配色方案的安装教程在 这里,恕不赘述。
我个人使用的是 Nexus 主题和 Flatland Dark 配色,配置如下:
"theme": "Nexus.sublime-theme","
color_scheme": "Packages/Theme - Flatland/Flatland Dark.tmTheme",
效果如下:
# 编码(Coding)
优秀的编辑器使编码变的更加容易,所以 Sublime Text 提供了一系列功能以提高开发效率。
良好的代码应该是规范的,所以Google为每一门主流语言都设置了其代码规范(Code Style Guideline)。我自己通过下面的设置使以规范化自己的代码。
Sublime Text 支持代码段(Code Snippet),输入代码段名称后 Tab 即可生成代码段。
你可以通过Package Control安装第三方代码段,也可以自己创建代码段,参考这里。
Sublime Text 基本的手动格式化操作包括:Ctrl + [ 向左缩进, Ctrl + ] 向右缩进,此外 Ctrl + Shift + V 可以以当前缩进粘贴代码(非常实用)。
除了手动格式化,我们也可以通过安装插件实现自动缩进和智能对齐:
1.HTMLBeautify:格式化HTML。
2.AutoPEP8:格式化Python代码。
3.Alignment:进行智能对齐。
Sublime Text 支持一定的自动完成,按 Tab 自动补全。
编写代码时会碰到大量的括号,利用 Ctrl + M 可以快速的在起始括号和结尾括号间切换, Ctrl + Shift + M 则可以快速选择括号间的内容,对于缩进型语言(例如Python)则可以使用 Ctrl + Shift + J 。
此外,我使用 BracketHighlighter 插件以高亮显示配对括号以及当前光标所在区域,效果如下:
尽管提供了 Python 控制台,但 Sublime Text 的控制台仅支持单行输入,十分不方便,所以我使用 SublimeREPL 以进行一些编码实验(Experiments)。
尽管我试图在本文包含尽可能多的 Sublime Text 实用技能,但受限于篇幅和我的个人经验,本文仍不免有所遗漏,欢迎在评论里指出本文的错误及遗漏。
下面是一些可能有用但我很少用到的功能:
1.宏(Macro):Sublime Text 支持录制宏,但我在实际工作中并未发现宏有多大用处。
2.其它平台(Other Platforms):本文只介绍了 Windows 平台上 Sublime Text 的使用,不过 Linux 和 OS X 上Sublime Text的使用方式和Windows差别不大,只是在快捷键上有所差异,请参考 Windows/Linux快捷键 和 OS X 快捷键。
3.项目(Projects):Sublime Text支持简单的 项目管理,但我一般只用到文件夹。
4.Vim模式(Vintage):Sublime Text自带 Vim模式。
5.构建(Build):通过配置,Sublime Text可以进行 源码构建。
6.调试(Debug):通过安装 插件,Sublime Text 可以对代码进行调试。
我把本文出现的Sublime Text按其类型整理在这里,以便查阅。
1.↑↓←→:上下左右移动光标,注意不是不是 KJHL !
2.Alt:调出菜单
3.Ctrl + Shift + P:调出命令板(Command Palette)
4.Ctrl + ` :调出控制台
1.Ctrl + Enter:在当前行下面新增一行然后跳至该行
2.Ctrl + Shift + Enter:在当前行上面增加一行并跳至该行
3.Ctrl + ←/→:进行逐词移动
4.Ctrl + Shift + ←/→进行逐词选择
5.Ctrl + ↑/↓移动当前显示区域
6.Ctrl + Shift + ↑/↓移动当前行
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)的内容
1.F3:跳至当前关键字下一个位置
2.Shift + F3:跳到当前关键字上一个位置
3.Alt + F3:选中当前关键字出现的所有位置
4.Ctrl + F/H:进行标准查找/替换,之后:
5.Alt + C:切换大小写敏感(Case-sensitive)模式
6.Alt + W:切换整字匹配(Whole matching)模式
7.Alt + R:切换正则匹配(Regex matching)模式
8.Ctrl + Shift + H:替换当前关键字
9.Ctrl + Alt + Enter:替换所有关键字匹配
10.Ctrl + Shift + F:多文件搜索&替换
1.Ctrl + P:跳转到指定文件,输入文件名后可以:
2.@ 符号跳转:输入 @symbol 跳转到 symbol 符号所在的位置
3.# 关键字跳转:输入 #keyword 跳转到 keyword 所在的位置
4.: 行号跳转:输入 :12 跳转到文件的第12行。
5.Ctrl + R:跳转到指定符号
6.Ctrl + G:跳转到指定行号
1.Ctrl + Shift + N:创建一个新窗口
2.Ctrl + N:在当前窗口创建一个新标签
3.Ctrl + W:关闭当前标签,当窗口内没有标签时会关闭该窗口
4.Ctrl + Shift + T:恢复刚刚关闭的标签
1.F11:切换普通全屏
2.Shift + F11:切换无干扰全屏
3.Alt + Shift + 2:进行左右分屏
4.Alt + Shift + 8:进行上下分屏
5.Alt + Shift + 5:进行上下左右分屏
6.分屏之后,使用 Ctrl + 数字键 跳转到指定屏,使用 Ctrl + Shift + 数字键 将当前屏移动到指定屏
*请认真填写需求信息,我们会在24小时内与您取得联系。