经过了长达一年的 Beta 公众测试之后,Atom,这个号称可 Hack 的面向 21 世纪的文本编辑器,正式更新到了 1.0 版。虽然没有在其推出之初就用上(以前还是需要邀请码才能用的呢),但在最近刷 Leetcode 的时候,深感这款编辑器的可定制性和方便程度远超其它。而前阵子微软推出的新 IDE 和 Facebook 推出的 Nuclide 都基于 Atom,颇让人有种天下编辑器苦人久矣之感。是以在这个特别的日子里,有必要为其记上一笔。
巨人的肩膀
对于程序员而言,世界上的编辑器只有三种:Vim,Emacs,和其它。而对于我这样的 Vim 党而言,虽然 Vim 和 Emacs 的学习成本稍有些高,但在经历了一段磨合期之后,的确深感到其设计的优越性,让你的手在最小的移动范围内能高效实现各种操作。而且两者的定制程度都很高,配合着各种插件,可以将输入体验提高到一个的新的层次。
可是,这两个 70 年代里诞生的软件,现在看来,终究还是显得有些过时了。除了界面经常让一些习惯用鼠标点来点去的用户觉得难以上手之外,其架构也使得在它上面进行功能扩展并不方便(无论是插件的编写语法还是兼容维护)。虽然对于程序员而言了解基本的 Vim 用法还是非常有必要,但对于非 Linux/Unix 的用户而言,更多人选择了”界面更友好”的其它编辑器。
这里面不乏有各种优秀应用,例如 Notepad++,TextMate,Sublime 等等。而 Atom 作为后起之秀,有着更加远大的理想。
为何选用 Atom
对于每个 Atom 的新用户而言,这是一个必问的问题。Atom 的其官方手册上给出了这样的答案:
这个世界上有那么多种编辑器,为什么你要花时间学习和使用 Atom 呢?
虽然 Sublime 和 TextMate 之类的编辑器已经非常好用了,但它们仅提供了很有限的拓展性。而在另一个极端,Emacs 和 Vim 提供了灵活的拓展性,但它们并不是很友好,需要使用专用的编程语言来配置和拓展。
我们觉得我们可以做得更好。我们的目标是在保证易用性的同时提供充分的可拓展性(hackability):这个编辑器会受到第一天学习编程的新生欢迎,而且当他们成长为编程专家时也难以割舍。
当我们使用 Atom 来开发 Atom 的时候,随着它的逐渐完善,我们愈发觉得已经离不开它了。从表面上来看,Atom 是一个能满足你的期待的,现代化的桌面文本编辑器,而在表面之下,这是一个值得你去一同完善的系统。
超强的可定制性
如上所述,如果说 Vim 和 Emacs 凝聚的是上个世纪文本编辑器的精华。那么 Atom 则将其思想进一步发扬光大。由于采用了 NodeWebkit 技术(Github 公司为了改进这技术还专门把 NodeWebkit 作者雇用了让他专职开发),在 Atom 里面,每一个窗口实际上都是一个本地渲染的网页。同时由于其良好的扩展性,用户可以用 JS 和 HTML5 语言在上面开发各种扩展。这大大降低了开发插件的难度,是以在短短的一年之内,围绕 Atom 所建的主题超过 500 多个,插件更是超过了 2000 多件。
相关的插件都可以在 https://atom.io/packages/ 上进行查找。 个人所安装的插件列表如下:
atom-beautify
atom-color-highlight
atom-ctags
atom-pair
autocomplete-plus
autocomplete-snippets
color-picker
comment
dash
easy-motion
editor-stats
emmet
ex-mode
file-icons
filetype-color
git-plus
git-tab-status
highlight-line
highlight-selected
japanese-wrap
jshint
language-scheme
linter
linter-coffeelint
linter-jshint
merge-conflicts
minimap
minimap-highlight-selected
mocha-test-runner
open-last-project
pretty-json
project-manager
remote-edit
script
seti-monokai
seti-ui
symbols-tree-view
terminal-status
todo-show
vim-mode
vim-surround
长长的列表可能让人觉得管理起来会很麻烦,但这正是 Atom 的强大之处。在安装好 Atom 后它会在系统里面加上一个 apm
的命令,将上面的脚本保存到一个 packages.txt 文件里,配合一个简单的脚本,安装插件只在一念之中:
> cat install.sh
while read p; do
apm install $p
done < packages.txt
更关键的一点是,不光是插件的管理可以用文本化,插件的配置也会全部放到 ~/.atom 目录下面,并以 cson 文件格式进行保存。这就意味着,只要通过 Github 之类的服务进行托管,就能很快的将其部署到新机器上,使得在新环境也能很快将 Atom 配置成自己习惯的样子!个人的配置如下:
"*":
"exception-reporting": {}
welcome:
showOnStartup: false
core:
themes: [
"one-light-ui"
"one-light-syntax"
]
disabledPackages: [
"atom-ctags"
"atom-pair"
"atom-color-highlight"
"editor-stats"
"emmet"
"exception-reporting"
"git-plus"
"git-tab-status"
"language-scheme"
"linter-coffeelint"
"feedback"
"git-plus"
"git-tab-status"
"metrics"
"merge-conflicts"
"minimap"
"minimap-highlight-selected"
"mocha-test-runner"
"symbols-view"
"symbols-tree-view"
"terminal-status"
"welcome"
]
followSymlinks: true
editor:
invisibles: {}
softWrap: true
showIndentGuide: true
showInvisibles: true
softWrapAtPreferredLineLength: true
fontSize: 14
lineHeight: 1.2
tabLength: 4
"filetype-color":
enabled: "false"
linter: {}
"terminal-status": {}
"atom-beautify":
analytics: false
muteUnsupportedLanguageErrors: true
language_coffeescript_beautify_on_save: true
language_css_beautify_on_save: true
language_csv_beautify_on_save: true
language_html_beautify_on_save: true
language_js_beautify_on_save: true
language_json_beautify_on_save: true
language_scss_beautify_on_save: true
language_ruby_disabled: true
language_python_beautify_on_save: true
"vim-mode":
useClipboardAsDefaultRegister: true
useSmartcaseForSearch: true
"japanese-wrap":
characterWidth: {}
lineBreakingRule: {}
emmet: {}
"autocomplete-plus":
confirmCompletion: "tab and enter"
includeCompletionsFromAllBuffers: true
minimap:
plugins:
"highlight-selected": true
"atom-ctags": {}
"atom-pair": {}
"atom-color-highlight": {}
"linter-jshint": {}
"vim-surround": {}
autosave:
enabled: true
script:
scrollWithOutput: false
至于其它的,还可以自定义 snippets,shortcuts 之类的,就不在这里一一描述了。但从上应该已经能体会到,只要你乐意去改,很多东西都是能 Hack 的,毕竟 Atom 从一开始就定位如此了:P
遗憾之处
虽然 Atom 的确有许多优秀的地方,我也通过定制尽可能地将 Vim 上的操作习惯迁移到了 Atom 上来。不过在使用 Atom 期间,还是遇到了一些小问题或不快的地方。
- 启动稍慢
虽然打开后的反应还是很及时,但在启动的时候速度还是相对慢了一些。如果插件安装得比较多的话,有时可能需要等上数十秒。相比之下,基本 Atom 开发的微软 Code IDE 似乎快上不少,看来 Atom 应该还有不少待优化的地方。 - 部分插件功能太弱
Vim 里面的 NerdCommenter 提供了许多强大的代码注释功能,可以快速地进行状态切换。这点在调试代码的时候非常有用。而 Atom 里面暂时还没有个较好的替代,而且唯一现在有的在家里的 Mac Mini 上还不能正常使用。其它的快速跳转和添加配对括号的插件也不是很顺手,内置的 Terminal 似乎也无法读取本地的 .zshrc 配置导致用得不习惯。这一些小问题,只能期待社区更加给力一点了。 - 远程编辑功能缺失
不知道是我没有找对还是怎么回事,现有的 RemoteEdit 和Nuclide-server 都无法满足我的需求,使得在公司电脑上想在本地写 VM 里面的代码还是一种奢望。
虽然稍有遗憾,但 Atom 的良好可定制性,还是深深地赢得了我的欢心。也相信随着 1.0 版的面世,这款编辑器将会变得更加强大。