yasnippet可以把我们常用的代码段或文本储存起来,到使用的时候只需键入几个字母就会自动带出。

比如我们在写python代码时,常常会在文件的第一行写下: #!/usr/bin/env python,经常这么手工键入是不是很没有效率,用yasnippet来帮你!

方法:

一、新建snippet

使用命令 M-x yas-new-snippet 打开一个新buffer,或者直接新建一个文件,输入内容后保存到你指定的位置即可。

用M-x yas-new-snippet 打开的buffer内容默认如下:

# -*- mode: snippet; require-final-newline: nil -*-
# name:
# key:
# binding: direct-keybinding
# –

其实只需要以下内容就可以了:

# name: file header
# key: fh
# binding: direct-keybinding
# --
#!/usr/bin/env python
# coding:utf-8
# Filename:`(file-name-nondirectory buffer-file-name)` $0

解释下

name: file header 这是片段的名称,叫做 file header,这个 file header会显示在emacs菜单栏的yasnippet里。

key: fh 这是快捷键,在文件里输入fh后按tab键就会展开这个片段。

从#-- 以下输入代码片段就好了

Filename:`(file-name-nondirectory buffer-file-name)` 这个有意思了,这个是显示当前buffer的名字的,让emacs帮你自动写。

$0 表示片段展开后光标所在的位置

二、保存

snippet写好后要保存到哪里呢?一般可以保存到yasnippet的默认安装位置(.emacs.d/elpa/yasnippet-20140729.1240/snippets),或者是自己定义的位置,比如:~/.emacs.d/custom-snippets。如果保存到默认位置则不需特别设置即可使用;如果保存到了自定义的位置,那么还要在.emacs配置文件里告诉emacs到哪里去找这个片段:

;Yasnippet
(require 'yasnippet)
;设置snippet目录
(setq yas-snippet-dirs '(
"~/.emacs.d/custom-snippets" ;personal snippets
"~/.emacs.d/elpa/yasnippet-20140729.1240/snippets" ;default
;"~/.emacs.d/elpa/yasnippet-20140720.1534/snippets" ;default
))
(yas-global-mode )

注意yasnippet的目录名,当你更新后这个目录名会变的。目前还没有办法,只有每次更新后手工去改这个路径。

2014.09.04更新:

新版的yasnippet已经有了改进,

yas-snippet-dirs 的默认值现在是这样:
("~/.emacs.d/snippets" yas-installed-snippets-dir)

yas-installed-snippets-dir 会自动找到下载的新版本号,比如:/.emacs.d/elpa/yasnippet-20140821.38/snippets,以后不必操心版本号了。

所以现在.emacs文件里就很简单了:

;;yasnippet
(require 'yasnippet)
(yas-global-mode )

是的,这样就可以了,记得把自定义的snippet文件夹custom-snippets改成snippets,这样在配置文件里也不用特别说明了,因为默认的路径里已经预设了这个。

最后注意 在自定义的 custom-snippets 目录中要建一个python-mode目录!把刚创建的文件放在里面。

snippets 目录中要建一个python-mode目录!

三、使用

新建一个python文件,在文件第一行键入 fh 然后按 tab 键,显示效果如下:

--End--

附:

#!/usr/bin/env python 叫做 shebang line

http://stackoverflow.com/questions/2429511/why-do-people-write-usr-bin-env-python-on-the-first-line-of-a-python-script

In computing, a shebang (also called a hashbang, hashpling, pound bang, or crunchbang) refers to the characters "#!" when they are the first two characters in an interpreter directive as the first line of a text file. In a Unix-like operating system, the program loader takes the presence of these two characters as an indication that the file is a script, and tries to execute that script using the interpreter specified by the rest of the first line in the file.

自定义 Yasnippet 模板的更多相关文章

  1. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面

    前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ...

  2. VS自定义项目模板:[2]创建VSIX项目模板扩展

    VS自定义项目模板:[2]创建VSIX项目模板扩展 听语音 | 浏览:1237 | 更新:2015-01-02 09:21 | 标签:软件开发 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师 ...

  3. dedecms如何自定义专题模板

    很多人看到别人的网站也是用dedecms建的,但是他们的专题做得很漂亮,也在想如何自定义dedecms专题模板呢? 其实很简单,只要在dedecms默认专题模板上做一些修改就好了 <!DOCTY ...

  4. android自定义UI模板图文详解

    不知道大家在实际开发中有没有自定义过UI模板?今天花时间研究了一下android中自定义UI模板,与大家分享一下. 每个设计良好的App都是自定义标题栏,在自定义标题栏的过程中大部分人可能都是自定义一 ...

  5. Android Studio自定义注释模板及生成JavaDoc

    刚开始学习Android,使用了Android Studio IDE.为了将来生产JavaDoc,学习一下如何自定义注释模板. . 自定义注释模板 1. 通过 File –>Settings 或 ...

  6. ThinkPHP框架配置自定义的模板变量(十)

    原文:ThinkPHP框架配置自定义的模板变量(十) 模板替换(手册有详细介绍对应的目录) __PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/ __ROOT__: 会替换成当 ...

  7. Webappbuilder自定义widget模板

    Webappbuilder自定义widget模板 by 李远祥 到\\widgets\samplewidgets目录下拷贝 CustomWidgetTemplate 文件并重命名为MyWidget 设 ...

  8. Pycharm 自定义文件模板

    Pycharm 自定义文件模板 每次新建文件都有相同的代码框架,每次重复敲浪费了程序员的寿命啊 按照下面方式自定义自己的模板:

  9. VS2017自定义新建模板

    今天测试了一下用自定义的模板新建C++模板,结果出了一些问题,不过已经解决了,现在把经验分享出来. 1. 首先可以先自定义一个以后经常用的模板,例如下面这个. 2.   项目   下找到    导出模 ...

随机推荐

  1. cloudera hbase集群简单思路

    文章copy link:http://cloudera.iteye.com/blog/889468 链接所有者保留所有权! http://www.csdn.net/article/2013-05-10 ...

  2. CSS 去掉IE10中type=password中的眼睛图标

    在IE10中,input[type=password],如果我们输入内容后,内容会变成圆点,这与以前一样,但后面多了一个眼睛图标,我们鼠标移过去按下会出现输入内容.有时我们想去掉这功能.IE10允许我 ...

  3. JAVA中“==”与equals()方法区别

    equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...

  4. bitmap的实现方法

    bitmap是一个十分有用的结构.所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素.由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省. 适用 ...

  5. CodeForces 682E Alyona and Triangles (计算几何)

    Alyona and Triangles 题目连接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/J Description You ar ...

  6. Web安全--使用Salt + Hash将密码加密后再存储进数据库

    转载原地址 http://www.bozhiyue.com/mianshiti/_net/2016/0728/314239.html (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站 ...

  7. POJ 2446 Chessboard (二分图最大匹配)

    题目链接:http://poj.org/problem?id=2446 给你一个n*m的棋盘,其中有k个洞,现在有1*2大小的纸片,纸片不能覆盖洞,并且每个格子最多只能被覆盖一次.问你除了洞口之外这个 ...

  8. C++常用容器

    vector 顺序容器,和数组类似,可从尾部快速的插入和删除,可随机访问. vector的常用成员函数: #include<vector> std::vector<type> ...

  9. hadoop namenode又一次格式化以后hbase的hmaster进程启动后立即消失

    hadoop的 namenode又一次格式化以后.重新启动hbase.发现它的hmaster进程启动后立即消失,查看一大堆日志,最后在zookeeper的日志里发现例如以下问题 Unable to r ...

  10. Android传感器编程带实例

    看了程序人生 网站的 编程高手的编程感悟 深有感触,好像也是一个android 程序员写的,推荐大家也看看.话不多说,还是言归正传吧. 一.前言 我很喜欢电脑,可是笔记本还是太大,笔记本电脑再小还是要 ...