Snippets 是方便加速输入的代码片断,在 spacemacs 中能够很方便的创建并插入它们,只需几个快捷键就可以免去日常重复输入内容的麻烦。Spacemacs 默认利用 yasnippet 工具管理代码片断。

创建代码片断文件

每个代码片断(snippet)被保存为一个文件,所有自定义的文件都被保存在 ~/.emacs.d/private/snippets/ 中。主要可以通过以下方式创建代码片断。

  • 通过 yas-new-snippet: 在使用 evil 模式的 spacemacs 中,双击 space 键或者 Alt+x 选择并执行命令 yas-new-snippet。这将打开新的等待完善的模板 buffer,如下所示。
1
2
3
4
# -*- mode: snippet -*-
# name:
# key:
# --

其中以 # 号开头的行表示注释,用于识别和使用代码片断。注释下面才是代码片断的内容。

  • 通过 helm-yas-create-snippet-on-region: 首先在文件中选择一小段代码,然后双击 space 键或者 Alt+x 选择并执行命令 helm-yas-create-snippet-on-region,这样就可以从已选择的文字定义代码片段。

代码片断的定义

一个代码片断可以是任意文字,通常是频繁书写的小段代码。代码片断有静态和动态之分。动态 snippet 在插入时,需要动态输入一些内容,通过 tab 键来改变填写的位置。

例如下面创建的 React 部件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# -*- mode: snippet -*-
# name: React component
# key: rc
# --
import React from 'react'

export default props =>
  <$1>
    $0
  </$1>
  • Tab-stops 由 $ 号和其后的数字来定义。
  • $1 为第一输入位置,允许动态值的插入。如果代码片断不同位置有多个相同的 Tab-stop,则在输入时在每个位置都会出现相同的内容。
  • $0 是最终的鼠标位置。

此外,可以调用命令 yas-visit-snippet-file 来察看已有的代码片段,进行参考或者修改。

代码片断的存储和使用

在文件夹 ~/emacs.d/private/snippets/ 中,代码片断通常被存储在以各 emacs 主模式命名的子文件夹中。例如上面的 React 代码片断,可以存储为 ~/.emacs.d/private/snippets/js2-mode/rc。在 org-mode 中定义的伐码片段被存在文件夹 ~/emacs.d/private/snippets/org-mode 中。

当你花了时间和努力创建出了自己的一套 snippets,最好利用云存储如 github 及时进行备份。

使用“space i s”插入 snippet: 处于 evil 模式下的 spacemacs,插入代码片段的命令 spacemacs/helm-yas 默认绑定快捷键“space i s”。

本文参考 CODE SNIPPETS IN SPACEMACS