简介

yasnippet是emacs下一套高效的模版(代码块)系統,它允许自定义模版内容并通过tab自动展示,省去了很多重复编写复杂代码块的时间,提高了开发的效率。

官方描述:YASnippet is a template system for Emacs. It allows you to type an abbreviation and automatically expand it into function templates.

安装配置

对于yasnippet的安装可以查看yasnippet github

在这里本人使用的是spacemacs,具体可以查看我的个人配置,基本配置代码如下:

(setq yas-snippet-dirs
'("~/.spacemacs.d/fidding/local/yasnippet/snippets";;personal snippets
    ))
(yas-global-mode 1)

yas-snippet-dirs为自定义模版存放的文件夹地址。

创建自定义模版

当安装完yasnippet插件后,在emacs下执行M-x yas-new-snippet,如图

\snippet.png 回车执行,将会出来初始化自定义模版,如图

\snippet2.png

第一行# -*- mode: snippet -*-表示当前的模版文件文件mode为snippet-mode,一般默认。

第二行# name:描述当前的模版名称(模版的功能描述)。

第三行# key:为模版的调用快捷键。

第四行# --从该语句下面即为自定义模版内容。

下面我将简单自定义一个js的alert代码,如下所示:

# -*- mode: snippet -*-
# contributor: fidding <www.fidding.me>
# name: alert hello for js
# key: alert
# --
alert('hello');

在这里我添加第二行用于声明模版创建者,alert('hello')即为当在js-mode下输入alerttab之后自动展示的模版内容。

按下C-c C-c保存该自定义模版,根据提示选择model(执行yas-new-snippet时文件的model,在这里为js-mode),然后保存文件。

那么当我在js-mode文件下输入alerttab后将会出来alert('hello')自定义代码块。

高级模版

snippet的语法变量是由$美元符号开始,并且标注1,2,3来定义顺序。

在模版内tab健移动光标并由特殊的$0来指明光标最后停留位置。 自定义模版代码如下:

# -*- mode: snippet -*-
# contributor: fidding <www.fidding.me>
# name: define a function 
# key: function
# --
function ${1: className} (${2: args}) {
    $0
}

保存模版后输入functiontab将会显示

function className (args) {

}

并且光标停留在className处,当按下tab后,光标跳到args处,再按下tab光标跳到函数内部,也就是顺序为$1,$2,$0。

${1: className}的语法规则为$声明,1为序号,clasName为默认名称(也可以为空)。

总结

合理使用yasnippet能更好得提高代码执行效率,so

happy joining !