Tianjin Linux User Group
Customize SnipMateCustomize SnipMate
By Richard Ma (richard_ma)By Richard Ma (richard_ma)Sunday, July 3, 2011Sunday, July 3, 2011
Tianjin Linux User Group
IF IF 有问题 有问题 THEN THEN 请示意我请示意我
Tianjin Linux User Group
OverviewOverview
● 简介与安装
● 基本使用方法
● Snippet语法与自定义
● 高级 Snippet特性
● 操作演示
● 改进方向
● 参考资料
Tianjin Linux User Group
简介简介
● SnipMate可以将简短的触发短语 (trigger)替换为需要的文字片段。
● SnipMate在 vim.org的主页:– http://www.vim.org/scripts/script.php?script_id=2540
● SnipMate最新开发版仓库:
– http://github.com/msanders/snipmate.vim● 本例中使用 SnipMate版本为 v0.83
Tianjin Linux User Group
安装安装
● 下载 SnipMate安装压缩包
● 解压到 ~/.vim/目录下(如果是版本升级,请先删除所有旧版本文件,包括默认的 snippets)
● 打开 filetype和 plugin支持(可以添加到 vimrc中)
Tianjin Linux User Group
基本使用方法基本使用方法
● SnipMate默认就提供了很多缩写和文字段落的数据,类似trigger —— expand text(这样的一组叫做snippet)
● 在 insert模式下使用:trigger<tab>
● 在 tab键按下后, trigger会被替换为:expand text
Tianjin Linux User Group
SnippetSnippet运行机制运行机制
● SnipMate在查询 Snippet时,依据 filetype分类,每个 filetype可以定义自己的 Snippet
● Snippet以 trigger作为 id,但允许 id重复
● 多个 Snippet可以定义在一个文件中,也可分为单独的文件
● Snippet中可以使用变量( tab stop)和占位符( placeholder)
● 所有 Snippet定义文件保存在 ~/.vim/snippets/
Tianjin Linux User Group
在一个文件中定义多个在一个文件中定义多个 SnippetSnippet
● 文件扩展名为: <filetype>.snippets– filetype为文件类型,扩展名末尾有 s
Tianjin Linux User Group
基本语法基本语法
● 在一个文件中定义多个 snippet语法:– snippet <trigger>
<expand text>
● 带有注释的写法
– # This is a commentsnippet <trigger>
<expand text>
● 注释必须放在行开头,不可以放在 <expand text>中; <expand text>可以写多行,以 <tab>开头。
Tianjin Linux User Group
Tab StopTab Stop
● <expand text>中加入变量,可是使得 SnipMate的替换功能更加强大
– ${#}这里的 #为一个数字,表示按 tab跳转的序号
Tianjin Linux User Group
PlaceholderPlaceholder
● Placeholder可以给 Tab Stop赋予默认值– ${1:placeholder}
Tianjin Linux User Group
引用引用 Tab StopTab Stop的值的值
● 使用 $#的方式引用 Tab Stop的值(包括placeholder)
Tianjin Linux User Group
将将 Tab StopTab Stop作为作为 PlaceholderPlaceholder
● ${1:placeholder}可以作为 ${2:$1}的 placeholder
Tianjin Linux User Group
多匹配多匹配 triggertrigger
Tianjin Linux User Group
全局全局 SnippetSnippet
● snippet/_.snippets● 语法与其他 snippets文件相同
● 任何 filetype都可以触发其中的 trigger
Tianjin Linux User Group
插入正在编辑的文件名插入正在编辑的文件名
filename<tab>
test(filename is test.st)
Tianjin Linux User Group
调用调用 vimrcvimrc中的变量中的变量
● 在 ~/.vimrc中定义变量,使用如下方式调用。
Tianjin Linux User Group
使用使用 system()system()函数调用函数调用 bashbash命令命令
grouplist<tab>
Tianjin Linux User Group
SnipMateSnipMate操作演示操作演示
● 使用 SnipMate协助完成一个分割数字的程序
● 借助 SnipMate自动生成注释文档
● 递归算法
● C语言编写
Tianjin Linux User Group
改进方向改进方向
● Tab stop必须从 1开始编号
● 不支持 placeholder的嵌套– <div ${1: id=”${2:some_id)”}${1: id=”${2:some_id)”}>${3}</div>
● Tab stop不支持正则表达式匹配
● 不支持多行 Placeholder
● 在同一文件中,不支持分段落使用不同的snippets定义文件
● SnippetSnippet的的 mashupmashup
Tianjin Linux User Group
参考资料参考资料
● SnipMate帮助文档– 进入 vim
– :h snipmate
Tianjin Linux User Group
Top Related