Atom 文本编辑器

本文即为在 Atom 下编写完成,在写作过程中让我对这个崭新的 1.0 版本文本编辑器
有了更多的了解。
在阅读本文时注意快捷键于后面英文单词的对应可帮助记忆,在使用中忘记的快捷键以可以通过使用
查询面板(后面会提到)进行查询。
如果你在使用过程中发现了异常和错误可以到 Atom 所在的
GitHub 仓库提交问题报告。同一款编辑器一同成长,愿力量与你同在!
下面的快捷键均为 Mac OS X 默认设置。如你用的是 Windows 或者是 Linux,可能需要尝试将
所有提到的 cmd 改为 ctrl

基础中的基础

开始之前先把下面这条快捷键记住。cmd+shift+P
它会打开类似 Alfred 的快捷功能选择窗口,
如果你从来没有听过 Alfred(此为 Mac OS X 特有应用) 那你应该赶紧去所搜引擎中找找了。

保存时间

快捷键 描述
cmd-shift-S 可以另存为 “Save As”
cmd-alt-S 可以保存全部的 “Save All”.

打开文件与目录

如果在命令行环境中可以使用下面的方法一次打开多个目录。

  1. # 打开目录
  2. atom ./hopes ./dreams
  3. # 获得帮助
  4. atom -h
快捷键 描述
cmd-O 打开文件
cmd-shift-O 添加目录至当前编辑器窗口

cmd-P 可以打开 Fuzzy Finder 进行模糊搜索,默认可所搜区域为项目内所有文件。
下面的命令可以对模糊所搜做一些限制,cmd-B 只所搜已打开的文件(存在与 Buffer 中的文件)。
cmd-shift-B

1.0 版本中在编辑器中添加的新文件无法使用 Fuzzy Finder(模糊寻找) 找到,重启后则可以解决。

边栏(树目录)

快捷键 描述
cmd-\ 显示或隐藏边栏
ctrl-0 聚焦边栏,聚焦后可以操作树目录中的文件

在聚焦后可以通过 a 来增加(add),m 来移动(move),d 来复制(duplicate)或者
delete 来删除(此处为键盘删除键)。
这里的操作并没有自动路径补全功能,之后可能需要插件支持。

开始使用

Atom 中几乎所有的功能都是以插件的形式存在的。所有如何安装插件则就是我们第一件要做的事。
除了图形界面安装的方法外,随 Atom 还安装了插件管理器叫做 apm 。通过它也可以直接安装
和更新插件。简单说主题也是插件,所以安装主题与安装插件的步骤类似。

下面的操作均需要联网

  1. # 安装插件
  2. apm install <package_name>
  3. # 安装指定版本的插件
  4. apm install <package_name>@<package_version>
  5. # 查询插件
  6. apm search <package_name>
  7. # 查询插件详情
  8. apm view <package_name>
移动光标

Atom 的移动快方法同 Emacs 一致。在熟悉使用 Atom 后也很容易的转移至
Emacs 的环境下熟练工作。

单个字符的移动,效果于方向键一致。

快捷键 描述
ctrl-P 上移(Previous)
ctrl-N 下移(Next)
ctrl-B 后移(Back)
ctrl-F 前移(Forward)

在单个字符移动基础上,可以延展至更大范围的移动。例如,单词,整行。

快捷键 描述
alt-B 向后以词为单位移动(英文),中文则以英文标点为间隔
alt-F 向前以词为单位移动(英文),中文则以英文标点为间隔
ctrl-E 移动至行末(End)
ctrl-A 移动至此行首字符(Ahead)
ctrl-A(敲击两次) 移动至此行行首(包括空格)
cmd-up 移动至文件最顶
cmd-down 移动至文件最低

ctrl-G 加数字可移动至目标行,使用 row:column 可以定位行数和列数,
使用这个方法在查找错误时变得十分方便。

cmd-R 可以在当前文件中(Buffer)按照符号来搜索,符号关键字指的是函数名(代码中)
或标题(文档中)。

选择

选择是在移动的基础上加入 shift 既可完成。特别的几种选择方法如下。

快捷键 描述
cmd-L 选取整行
ctrl-shift-W 选取当前单词(英文),中文则为整行
编辑与删除

Atom 如同其他的常用的文本编辑器一样可以直接编辑文字,并不存在特殊的模式。但了解下面的
编辑技巧可以让你使用 Atom 更得心应手。

编辑操作

快捷键 描述
ctrl-T 交换光标两边的字符(Transpose)
ctrl-J 将下一行同当前行合并(Join)
ctrl-cmd-up 向上冒泡当前行
ctrl-cmd-down 向下冒泡当前行
cmd-shift-D 复制当前行(Duplicate)
cmd-K, cmd-U 转换选中字符至全大写
cmd-K, cmd-L 转换选中字符至全小

删除操作

快捷键 描述
ctrl-shift-K 删除当前(Cut)
cmd-delete 删除此行光标后全部字符
cmd-backspace 删除至当前行首
ctrl-K 切帖至行末(Cut)
alt-H 删除前一个字符
alt-D 删除后一个字符

多个光标及选择

Sublime Text 相同,Atom 也同样有多光标的实现。
按住cmd可以在文本中使用进行区域性选择。

快捷键 描述
cmd-click 在点击处增加新光标
cmd-shift-L 将选择区域转换为多光标
ctrl-shift-up 在上一行增加新光标
ctrl-shift-down 在下一行增加新光标
cmd-D 选择下一个于当前被选字符相同的字符并添加新光标
cmd-ctrl-G 选择全部于当前选中字符相同的字符并添加光标
括号

编程中最常打交道和需要跳出的莫属于括号和引号了。Atom 对于括号有很好的处理办法,
各种括号在光标内移动都会被自动高亮(引号和 HTML 中的标签也会被高亮和自动补全)。
选中内容后使用括号可以自动将选中内容包含在括号或引号内。

快捷键 描述
ctrl-M 跳至最近的一个括号的起始位置
ctrl-cmd-M 选中括号内的所有内容
alt-cmd-. 关闭最近的一个 XML/HTML 标签
搜索与替换
快捷键 描述
cmd-F 当前文本中搜索
cmd-shift-F 搜索整个项目
cmd-G 找到下一个匹配的搜索结果
cmd-G-shift 找到上一个匹配的搜索结果

在项目搜索中可以使用 wildcard 和指定目标的搜索路径。

代码片段(Snippets)

代码片段让你在写代码时有飞一般的感觉,代码片段会将预先设置好的代码片段替换在当前文本中,
并且设置焦点并用 tab 聚焦下一个焦点,
shift + tab 聚焦上一个焦点。

所有的代码片都存储在下面的目录中 ~/.atom/snippets.cson
你可以通过 Open Your Snippets Menu 打开此文件。

快捷键 描述
alt-shift-S 显示当前文件类型下的全部代码片段

当然制作代码片也有一个代码片,它就是 snip

制作代码片段

下面是一个简单的代码片样例。

  1. '.source.js':
  2. 'console.log':
  3. 'prefix': 'log'
  4. 'body': 'console.log(${1: "crash"});$2'
  • .source.js 为代码片可用的文件类型范围
  • console.log 为代码片内容描述
  • prefix 为代码片调用字符
  • body 代码片主体内容
  • ${1:'crash'} 用于定义焦点,顺序及其默认值

多行代码代码片

  1. '.source.js':
  2. 'if, else if, else':
  3. 'prefix': 'ieie'
  4. 'body': """
  5. if (${1:true}) {
  6. $2
  7. } else if (${3:false}) {
  8. $4
  9. } else {
  10. $5
  11. }
  12. """
代码折叠

可以点击代码行号边的箭头折叠当前层级的代码。

快捷键 描述
alt-cmd-[ 折叠当前层级
alt-cmd-] 展开当前层级
alt-cmd-shift-{ 折叠全部层级
alt-cmd-shift-} 展开全部层级
cmd-K, cmd-N(层级数) 根据层级级别折叠
多窗口模式

任意一个窗口都可以无需的四面分割,分割的部分则依然使用标签来表示。

快捷键 描述
cmd-k arrow 根据方向指定分割窗口
cmd-K, cmd-arrow 聚焦指定方向的窗口
解码(Encoding)

Atom 支持多种解码格式(包括中文 GBK 的支持),也可自动识别解码方式
(不能识别时则默认为 UTF-8)。当然你也可以使用这种方法将多种文本在多种解码格式直接转换。

快捷键 描述
ctrl-shift-U 切换解码方式
书签

Atom 添加书签就如同你看书的时添加书签一样,它使你在书写代码时可以自如的跳转到你需要的
位置。

快捷键 描述
F2-cmd 可以在当前行切换标记书签
F2 跳转至下一个书签
F2-shift 跳转至上一个书签
F2-ctrl 查看全部的书签
F2-cmd-shift 清除全部标签
扩展插件

下面列出了笔者在日常 Web 开发中所易用的插件,这些插件满足了超过百分之九十笔者的开发需求。下面的这些插件均可以在官方插件管理器中进行下载和安装。

  1. [
  2. {
  3. "name": "advanced-new-file",
  4. "version": "0.4.3"
  5. },
  6. {
  7. "name": "advanced-open-file",
  8. "version": "0.8.2"
  9. },
  10. {
  11. "name": "atom-beautify",
  12. "version": "0.28.8"
  13. },
  14. {
  15. "name": "AtomicChar",
  16. "version": "0.3.8"
  17. },
  18. {
  19. "name": "autocomplete-paths",
  20. "version": "1.0.2"
  21. },
  22. {
  23. "name": "docblockr",
  24. "version": "0.7.3"
  25. },
  26. {
  27. "name": "ex-mode",
  28. "version": "0.7.0"
  29. },
  30. {
  31. "name": "file-icons",
  32. "version": "1.6.2"
  33. },
  34. {
  35. "name": "language-jade",
  36. "version": "0.6.2"
  37. },
  38. {
  39. "name": "linter",
  40. "version": "1.3.0"
  41. },
  42. {
  43. "name": "linter-jshint",
  44. "version": "1.1.4"
  45. },
  46. {
  47. "name": "markdown-toc",
  48. "version": "0.3.0"
  49. },
  50. {
  51. "name": "merge-conflicts",
  52. "version": "1.3.5"
  53. },
  54. {
  55. "name": "minimap",
  56. "version": "4.12.2"
  57. },
  58. {
  59. "name": "minimap-linter",
  60. "version": "1.0.0"
  61. },
  62. {
  63. "name": "open-in-browser",
  64. "version": "0.4.6"
  65. },
  66. {
  67. "name": "pigments",
  68. "version": "0.9.3"
  69. },
  70. {
  71. "name": "sort-lines",
  72. "version": "0.11.0"
  73. },
  74. {
  75. "name": "sync-settings",
  76. "version": "0.6.0"
  77. },
  78. {
  79. "name": "tab-switcher",
  80. "version": "1.2.1"
  81. },
  82. {
  83. "name": "theme-switcher",
  84. "version": "1.1.0"
  85. },
  86. {
  87. "name": "vim-mode",
  88. "version": "0.57.0"
  89. },
  90. {
  91. "name": "atom-dark-syntax",
  92. "version": "0.27.0",
  93. "theme": "syntax"
  94. },
  95. {
  96. "name": "atom-dark-ui",
  97. "version": "0.49.0",
  98. "theme": "ui"
  99. },
  100. {
  101. "name": "atom-light-syntax",
  102. "version": "0.28.0",
  103. "theme": "syntax"
  104. },
  105. {
  106. "name": "atom-light-ui",
  107. "version": "0.41.0",
  108. "theme": "ui"
  109. },
  110. {
  111. "name": "base16-tomorrow-dark-theme",
  112. "version": "0.26.0",
  113. "theme": "syntax"
  114. },
  115. {
  116. "name": "base16-tomorrow-light-theme",
  117. "version": "0.9.0",
  118. "theme": "syntax"
  119. },
  120. {
  121. "name": "one-dark-ui",
  122. "version": "1.0.2",
  123. "theme": "ui"
  124. },
  125. {
  126. "name": "one-dark-syntax",
  127. "version": "1.1.0",
  128. "theme": "syntax"
  129. },
  130. {
  131. "name": "one-light-syntax",
  132. "version": "1.1.0",
  133. "theme": "syntax"
  134. },
  135. {
  136. "name": "one-light-ui",
  137. "version": "1.0.2",
  138. "theme": "ui"
  139. },
  140. {
  141. "name": "solarized-dark-syntax",
  142. "version": "0.38.1",
  143. "theme": "syntax"
  144. },
  145. {
  146. "name": "solarized-light-syntax",
  147. "version": "0.22.1",
  148. "theme": "syntax"
  149. },
  150. {
  151. "name": "about",
  152. "version": "1.0.1"
  153. },
  154. {
  155. "name": "archive-view",
  156. "version": "0.58.0"
  157. },
  158. {
  159. "name": "autocomplete-atom-api",
  160. "version": "0.9.2"
  161. },
  162. {
  163. "name": "autocomplete-css",
  164. "version": "0.9.0"
  165. },
  166. {
  167. "name": "autocomplete-html",
  168. "version": "0.7.2"
  169. },
  170. {
  171. "name": "autocomplete-plus",
  172. "version": "2.19.0"
  173. },
  174. {
  175. "name": "autocomplete-snippets",
  176. "version": "1.7.1"
  177. },
  178. {
  179. "name": "autoflow",
  180. "version": "0.25.0"
  181. },
  182. {
  183. "name": "autosave",
  184. "version": "0.22.0"
  185. },
  186. {
  187. "name": "background-tips",
  188. "version": "0.25.0"
  189. },
  190. {
  191. "name": "bookmarks",
  192. "version": "0.35.0"
  193. },
  194. {
  195. "name": "bracket-matcher",
  196. "version": "0.76.0"
  197. },
  198. {
  199. "name": "command-palette",
  200. "version": "0.36.0"
  201. },
  202. {
  203. "name": "deprecation-cop",
  204. "version": "0.53.1"
  205. },
  206. {
  207. "name": "dev-live-reload",
  208. "version": "0.46.0"
  209. },
  210. {
  211. "name": "encoding-selector",
  212. "version": "0.21.0"
  213. },
  214. {
  215. "name": "exception-reporting",
  216. "version": "0.36.0"
  217. },
  218. {
  219. "name": "find-and-replace",
  220. "version": "0.175.0"
  221. },
  222. {
  223. "name": "fuzzy-finder",
  224. "version": "0.87.0"
  225. },
  226. {
  227. "name": "git-diff",
  228. "version": "0.55.0"
  229. },
  230. {
  231. "name": "go-to-line",
  232. "version": "0.30.0"
  233. },
  234. {
  235. "name": "grammar-selector",
  236. "version": "0.47.0"
  237. },
  238. {
  239. "name": "image-view",
  240. "version": "0.54.0"
  241. },
  242. {
  243. "name": "incompatible-packages",
  244. "version": "0.24.1"
  245. },
  246. {
  247. "name": "keybinding-resolver",
  248. "version": "0.33.0"
  249. },
  250. {
  251. "name": "link",
  252. "version": "0.30.0"
  253. },
  254. {
  255. "name": "markdown-preview",
  256. "version": "0.150.0"
  257. },
  258. {
  259. "name": "metrics",
  260. "version": "0.51.0"
  261. },
  262. {
  263. "name": "notifications",
  264. "version": "0.57.0"
  265. },
  266. {
  267. "name": "open-on-github",
  268. "version": "0.37.0"
  269. },
  270. {
  271. "name": "package-generator",
  272. "version": "0.40.0"
  273. },
  274. {
  275. "name": "release-notes",
  276. "version": "0.53.0"
  277. },
  278. {
  279. "name": "settings-view",
  280. "version": "0.211.2"
  281. },
  282. {
  283. "name": "snippets",
  284. "version": "0.95.0"
  285. },
  286. {
  287. "name": "spell-check",
  288. "version": "0.59.0"
  289. },
  290. {
  291. "name": "status-bar",
  292. "version": "0.75.1"
  293. },
  294. {
  295. "name": "styleguide",
  296. "version": "0.44.0"
  297. },
  298. {
  299. "name": "symbols-view",
  300. "version": "0.100.0"
  301. },
  302. {
  303. "name": "tabs",
  304. "version": "0.82.0"
  305. },
  306. {
  307. "name": "timecop",
  308. "version": "0.31.0"
  309. },
  310. {
  311. "name": "tree-view",
  312. "version": "0.180.0"
  313. },
  314. {
  315. "name": "update-package-dependencies",
  316. "version": "0.10.0"
  317. },
  318. {
  319. "name": "whitespace",
  320. "version": "0.30.0"
  321. },
  322. {
  323. "name": "wrap-guide",
  324. "version": "0.35.0"
  325. },
  326. {
  327. "name": "language-c",
  328. "version": "0.45.0"
  329. },
  330. {
  331. "name": "language-clojure",
  332. "version": "0.16.0"
  333. },
  334. {
  335. "name": "language-coffee-script",
  336. "version": "0.41.0"
  337. },
  338. {
  339. "name": "language-csharp",
  340. "version": "0.6.0"
  341. },
  342. {
  343. "name": "language-css",
  344. "version": "0.32.1"
  345. },
  346. {
  347. "name": "language-gfm",
  348. "version": "0.80.0"
  349. },
  350. {
  351. "name": "language-git",
  352. "version": "0.10.0"
  353. },
  354. {
  355. "name": "language-go",
  356. "version": "0.31.0"
  357. },
  358. {
  359. "name": "language-html",
  360. "version": "0.40.0"
  361. },
  362. {
  363. "name": "language-hyperlink",
  364. "version": "0.14.0"
  365. },
  366. {
  367. "name": "language-java",
  368. "version": "0.15.0"
  369. },
  370. {
  371. "name": "language-javascript",
  372. "version": "0.85.0"
  373. },
  374. {
  375. "name": "language-json",
  376. "version": "0.15.0"
  377. },
  378. {
  379. "name": "language-less",
  380. "version": "0.28.1"
  381. },
  382. {
  383. "name": "language-make",
  384. "version": "0.14.0"
  385. },
  386. {
  387. "name": "language-mustache",
  388. "version": "0.12.0"
  389. },
  390. {
  391. "name": "language-objective-c",
  392. "version": "0.15.0"
  393. },
  394. {
  395. "name": "language-perl",
  396. "version": "0.28.0"
  397. },
  398. {
  399. "name": "language-php",
  400. "version": "0.27.0"
  401. },
  402. {
  403. "name": "language-property-list",
  404. "version": "0.8.0"
  405. },
  406. {
  407. "name": "language-python",
  408. "version": "0.38.0"
  409. },
  410. {
  411. "name": "language-ruby",
  412. "version": "0.57.0"
  413. },
  414. {
  415. "name": "language-ruby-on-rails",
  416. "version": "0.22.0"
  417. },
  418. {
  419. "name": "language-sass",
  420. "version": "0.40.0"
  421. },
  422. {
  423. "name": "language-shellscript",
  424. "version": "0.15.0"
  425. },
  426. {
  427. "name": "language-source",
  428. "version": "0.9.0"
  429. },
  430. {
  431. "name": "language-sql",
  432. "version": "0.17.0"
  433. },
  434. {
  435. "name": "language-text",
  436. "version": "0.7.0"
  437. },
  438. {
  439. "name": "language-todo",
  440. "version": "0.25.0"
  441. },
  442. {
  443. "name": "language-toml",
  444. "version": "0.16.0"
  445. },
  446. {
  447. "name": "language-xml",
  448. "version": "0.30.0"
  449. },
  450. {
  451. "name": "language-yaml",
  452. "version": "0.22.0"
  453. }
  454. ]