Tabstops
语法为 $1
、$2
等,标志光标跳转的位置,使用时可通过快捷键,如 Tab 和 Shift+Tab 按数字递增顺序跳转。$0
比较特别,标志此代码片段的结束,是最后一个跳转位置。
Placeholders
Placeholders are tabstops with values.
语法为 ${1:foo}
,foo
为 placeholder 的默认文本,会在代码片段展开的时候插入到对应位置,跳转到该位置时,默认文本会被选中。Placeholders 可以嵌套,如 ${1:hello ${2:world}}
。
选项Choice
语法为 ${1|one,two,three,with\, comma|}
,所有选项用 |
包围,选项之间用 ,
分隔,当一个选项中包含 ,
时,用 \,
替代。
变量Variables
Snippy 支持一些预定义的变量,语法为 $name
或 ${name:default text}
,可用变量有:
TM_SELECTED_TEXT
或VISUAL
:选中的文本TM_CURRENT_LINE
:当前行TM_CURRENT_WORD
:光标下的 wordTM_LINE_INDEX
:行号,从 0 开始TM_LINE_NUMBER
:行号,从 1 开始TM_FILENAME
:当前文件名TM_FILENAME_BASE
:去掉扩展名的当前文件名TM_DIRECTORY
:当前文件所在目录TM_FILEPATH
:当前文件的完整路径
转换Transform
Snippy 支持正则替换,语法为:
${<stop or variable>/<pattern>/<replacement>/<flags>}
如:
This ${1:word} will be changed to uppercase: ${1/.*/\U\0/g}.
↓↓↓
This hello will be changed to uppercase: HELLO.
Snippy 使用的正则语法为 Vim 的正则语法(比如 \0
、\{2,}
)而非 Javascript 正则语法(比如 $0
)。
${1:word} → ${1/a\{2,}/\U\0/g}.
↓↓↓
a,aa,ba,baa,a,aaa → a,AA,ba,bAA,a,AAA
表达式
Snippy 支持 Vimscript 和 Lua 两种表达式,语法为 `strftime('%c')`
、`!lua os.date('%Y-%m-%d')`
。Lua 表达式以 !lua
或 !l
开头;Vimscript 表达式不需要开头,但也可以以 !vim
或 !v
开头。