红联Linux门户
Linux帮助

Emacs高效的yasnippet 简单使用和定制

发布时间:2010-12-26 13:06:52来源:红联作者:ljp
Emacs高效的yasnippet
====================

Author: Ljp <ljp.gogo@gmail.com>
Date: 2010-12-24 10:28:08 CST


Table of Contents
=================
1 介绍yasnippet
2 安装yasnippet
3 使用yasnippet
4 定制自己的模板
5 再以一个51外部中断函数举例
6 参考资源


1 介绍yasnippet
~~~~~~~~~~~~~~~~
官方地址:[http://code.google.com/p/yasnippet/]

想看原汁原味的介绍建议看官方文档,这里中文简要说明一下:

首先如果你是Emacser,而你又没接触过yasnippet,请查看这里有一个很hacking的视频。
地址:[http://v.youku.com/v_show/id_XMjMxNDg5MjQ4.html]

YASnippet 是emacs高效一个通用的模板系统。它允许定义缩写并通过[TAB]键自动帮你展开。在我们平常编辑一经常复用的模板是非常有帮助的,比如本人平常做Latex
ppt就用到yasnippet,就显得非常方便快捷。

2 安装yasnippet
~~~~~~~~~~~~~~~~
Yasnippet的安装详细已经有好多文章介绍,并且官方视频里也简洁的演示,这里给出最简单步骤:
- 下载:wget http://yasnippet.googlecode.com/files/yasnippet-bundle-0.6.1c.el.tgz
- 解压并移动emacs路径:tar -xvf yasnippet-bundle-0.6.1c.el.tgz && mv yasnippet-bundle.el ~/.emacs.d/plugins
- 编辑.emacs文件:(add-to-list 'load-path " ~/.emacs.d/plugins")
(require 'yasnippet-bundle)
- 重启一下emacs,如果emacs设置有启动画面请按下[q]键就可以看到菜单里多一个yasnippet菜单,到些安装完毕。

3 使用yasnippet
~~~~~~~~~~~~~~~~
安装好之后,我们就可以试试牛力方便的yasnippet;;;
例如编辑一个C文件:emacs /tmp/yas_test.c
键入模板关键词inc 然后[TAB]键,就出现有模板选择
键入模板关键词main 然后[TAB]键,同样也出现一个我们常用main函数
简单的使用方法就是这样,是不是有很hacking的感觉,更多细节可以查看yasnippet菜单

4 定制自己的模板
~~~~~~~~~~~~~~~~~
- yasnippet的强大之处于允许用户自定义自己的模板,这里介绍它的定制功能,并通过latex-mode来演示它是如何高效编辑能力。这里演示用的Tex发行版本是texlive的latex-cjk-all扩展
- ubuntu 可以直接安装:sudo apt-get install texlive cjk-latex latex-cjk-all
- 定制自己的模板必须在.emacs配置文件里指定模板的位置,这一步必不可少,所以在.emacs加上:
(add-to-list 'load-path " ~/.emacs.d/plugins")
(require 'yasnippet-bundle)
(setq yas/root-directory "~/.emacs.d/snippets")
(yas/load-directory yas/root-directory)

这样.emacs的yasnippet就配置完成了,下来就是定制模板缩写词

随便进入Emacs的一个mode模式,我演示这里是latex-mode,然后输入命令[M-x] yas/new-snippet即可在这个模式下建立模板

输入yas/new-snippet命令,它会提示文件不存在,是否建立,这里直接键入[Enter]键,然后输入模块的名字。(注:这里模块的名字就是此模式下的缩写词即关键词)然后出现# -*- mode: snippet -*- 等字符,在这里删除它们,照着这里的演示一步一步来就要可以了。

以新建立一个幻灯片为例子,可以这个来:

1: #contributor : ljp <ljp.gogo@gmail.com>
2: #name : Create a slide frame
3: # --
4:
5: \frame{\frametitle{${1:Slide title}}
6: \pause{}
7: \begin{itemize}
8: \item $0
9: \end{itemize} }

说明:snippet的语法变量是以$美元符开始的,根据变量$1 $2 $... 定义顺序光标移动位置,特殊的$0是最后光标停位置

第1行是模板贡献者的一些信息

第2行是模板说明,也就是用鼠标点击yasnippet菜单里相应模式的模板的一些文字提示(这里Create a slide frame 就可以知道它是创建一个幻灯片)

第3行是语法要求,声明模板内容开始

第4行以后的,就是模板的内容了。

5 再以一个51外部中断函数举例
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. emacs /tmp/interrupt.c
2. [M-x] yas/new-snippet ->[Enter]键 -> 创建缩写关键词 interrupt ->[Enter]键
#contributor : ljp <ljp.gogo@gmail.com>
#name : Create a 51 interrupt function
# --

void int${1:变量1}() interrupt ${2:变量2} using ${3:变量3}
{
${0:这里是变量光标最后停留位置}
}

以上在C模式下,就可以键入关键词interrupt 然后[TAB]键,来创建一个51单片机外部中断

6 参考资源
~~~~~~~~~~~
- 李杀网:[http://xahlee.org/emacs/yasnippet_templates_howto.html]

- YASnippet基础入门:[http://blog.waterlin.org/articles/emacs-yasnippet-basic-usage.html]

- 官方doc:[http://yasnippet.googlecode.com/svn/trunk/doc/index.html]

- 一个yasnippet模板快速制作PPT演示视频:[http://v.youku.com/v_show/id_XMjMxNTQ1NzA4.html]

- 个人代码仓:[https://github.com/live5156go51]
[attach]33164[/attach]
文章评论

共有 8 条评论

  1. jifengtang 于 2011-12-03 18:31:41发表:

    有点难啊,不过很有用……

  2. tanyunhong 于 2011-01-12 16:38:06发表:

    受教

  3. tanyunhong 于 2011-01-12 16:36:36发表:

    看看

  4. lengyueyouhen 于 2010-12-27 19:07:52发表:

    不错好东西

  5. Keen_浪浪 于 2010-12-27 18:15:40发表:

    准备学习

  6. ljp 于 2010-12-27 10:17:53发表:

    嵌入式vi 更为好些,但要与系统交互绑定还是emacs方便.. 大家认为emacs或vim最hacking的插件是什么或功能?

  7. zz?1989 于 2010-12-26 16:52:17发表:

    用vi中 其实用vi或emacs只要用到熟了都是可以呢

  8. treo 于 2010-12-26 16:28:58发表:

    学习下