Customize snipmate

22
Tianjin Linux User Group Customize SnipMate Customize SnipMate By Richard Ma (richard_ma) By Richard Ma (richard_ma) Sunday, July 3, 2011 Sunday, July 3, 2011

Transcript of Customize snipmate

Page 1: Customize snipmate

Tianjin Linux User Group

Customize SnipMateCustomize SnipMate

By Richard Ma (richard_ma)By Richard Ma (richard_ma)Sunday, July 3, 2011Sunday, July 3, 2011

Page 2: Customize snipmate

Tianjin Linux User Group

IF IF 有问题 有问题 THEN THEN 请示意我请示意我

Page 3: Customize snipmate

Tianjin Linux User Group

OverviewOverview

● 简介与安装

● 基本使用方法

● Snippet语法与自定义

● 高级 Snippet特性

● 操作演示

● 改进方向

● 参考资料

Page 4: Customize snipmate

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

Page 5: Customize snipmate

Tianjin Linux User Group

安装安装

● 下载 SnipMate安装压缩包

● 解压到 ~/.vim/目录下(如果是版本升级,请先删除所有旧版本文件,包括默认的 snippets)

● 打开 filetype和 plugin支持(可以添加到 vimrc中)

Page 6: Customize snipmate

Tianjin Linux User Group

基本使用方法基本使用方法

● SnipMate默认就提供了很多缩写和文字段落的数据,类似trigger —— expand text(这样的一组叫做snippet)

● 在 insert模式下使用:trigger<tab>

● 在 tab键按下后, trigger会被替换为:expand text

Page 7: Customize snipmate

Tianjin Linux User Group

SnippetSnippet运行机制运行机制

● SnipMate在查询 Snippet时,依据 filetype分类,每个 filetype可以定义自己的 Snippet

● Snippet以 trigger作为 id,但允许 id重复

● 多个 Snippet可以定义在一个文件中,也可分为单独的文件

● Snippet中可以使用变量( tab stop)和占位符( placeholder)

● 所有 Snippet定义文件保存在 ~/.vim/snippets/

Page 8: Customize snipmate

Tianjin Linux User Group

在一个文件中定义多个在一个文件中定义多个 SnippetSnippet

● 文件扩展名为: <filetype>.snippets– filetype为文件类型,扩展名末尾有 s

Page 9: Customize snipmate

Tianjin Linux User Group

基本语法基本语法

● 在一个文件中定义多个 snippet语法:– snippet <trigger>

<expand text>

● 带有注释的写法

– # This is a commentsnippet <trigger>

<expand text>

● 注释必须放在行开头,不可以放在 <expand text>中; <expand text>可以写多行,以 <tab>开头。

Page 10: Customize snipmate

Tianjin Linux User Group

Tab StopTab Stop

● <expand text>中加入变量,可是使得 SnipMate的替换功能更加强大

– ${#}这里的 #为一个数字,表示按 tab跳转的序号

Page 11: Customize snipmate

Tianjin Linux User Group

PlaceholderPlaceholder

● Placeholder可以给 Tab Stop赋予默认值– ${1:placeholder}

Page 12: Customize snipmate

Tianjin Linux User Group

引用引用 Tab StopTab Stop的值的值

● 使用 $#的方式引用 Tab Stop的值(包括placeholder)

Page 13: Customize snipmate

Tianjin Linux User Group

将将 Tab StopTab Stop作为作为 PlaceholderPlaceholder

● ${1:placeholder}可以作为 ${2:$1}的 placeholder

Page 14: Customize snipmate

Tianjin Linux User Group

多匹配多匹配 triggertrigger

Page 15: Customize snipmate

Tianjin Linux User Group

全局全局 SnippetSnippet

● snippet/_.snippets● 语法与其他 snippets文件相同

● 任何 filetype都可以触发其中的 trigger

Page 16: Customize snipmate

Tianjin Linux User Group

插入正在编辑的文件名插入正在编辑的文件名

filename<tab>

test(filename is test.st)

Page 17: Customize snipmate

Tianjin Linux User Group

调用调用 vimrcvimrc中的变量中的变量

● 在 ~/.vimrc中定义变量,使用如下方式调用。

Page 18: Customize snipmate

Tianjin Linux User Group

使用使用 system()system()函数调用函数调用 bashbash命令命令

grouplist<tab>

Page 19: Customize snipmate

Tianjin Linux User Group

SnipMateSnipMate操作演示操作演示

● 使用 SnipMate协助完成一个分割数字的程序

● 借助 SnipMate自动生成注释文档

● 递归算法

● C语言编写

Page 20: Customize snipmate

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

Page 21: Customize snipmate

Tianjin Linux User Group

参考资料参考资料

● SnipMate帮助文档– 进入 vim

– :h snipmate

Page 22: Customize snipmate

Tianjin Linux User Group