emacs代码补完-yasnippet
Email:hamainter(AT)gmail.com
yasnippet是emacs的一款代码补完插件,类似于一个代码模版。基本用法就是“TAB”,输入关键字之后按TAB键,YASnippet根据预先设定的模版来展开代码。很好玩。
YASnippte有两种安装方法,一种是视频中使用的单el文件yasnippet-bundle.el,配置也简单一点,只要在你的.emacs文件中添加以下代码就可以了。
(add-to-list 'load-path
"~/.emacs.d/plugins")
(require 'yasnippet-bundle)
还有一种涉及多个文件,一个是yasnippet.el,还有一个存放模版文件的文件夹,里面按照不同的mode存放模版。相应的,你的配置文件中需要配置el文件的位置和模版文件夹所在的位置。
(add-to-list 'load-path
"~/.emacs.d/plugins/yasnippet-x.y.z")
(require 'yasnippet) ;; not yasnippet-bundle
(yas/initialize)
(yas/load-directory "~/.emacs.d/plugins/yasnippet-x.y.z/snippets")
二者使用起来是一样的。不过很明显的区别在于,单文件模式是指模版也完全整合到yasnippet-bundle.el文件中了,修改起来很麻烦。
而修改模版在我看来是必须的。因为原始的mode模本一般不太可能符合所有人的需要,至少我现在手上的版本来看,质量只能算是一般而已,令人不爽的,需要修改的地方还是很多的。另外,emacs的乐趣不就是完全可定制么?一个调教之前的emacs基本上并不比gedit高明多个,以上是个人意见。
所以我个人推荐多文件的安装方法。安装配置之后进入emacs,看到界面基本上是这样的。

而文件结构基本上是这样
sgml-mode/ |-- body |-- br |-- code |-- code.class |-- div |-- div.class |-- div.id |-- div.id-class |-- dov |-- form |-- head |-- header | |-- h1 | |-- h2 | |-- h3 | |-- h4 | |-- h5 | `-- h6
它与snippet文件夹里的文件成一一对应关系。也就是说,你需要修改哪个模版,只需要在snippet文件夹中找到相应的文件对它进行修改就可以了。
class ${1:ClassName}(${2:object}):
"""$3
"""
def __init__(self,${4:para}):
$0
以上是python中class的模版,不是原始的,我去掉了init中比较复杂的部分。定义了yasnippet这样的行为:
在emacs的python-mode中,你输入了”class”,然后按一下TAB,编辑器将自动给你填出如下代码段。
class ClassName(object):
"""
"""
def __init__(self,para):
并且光标停留在”ClassName”上,因为模版中$1位于这里。你可以对它进行修改。这里提一个模版的简单语法,模版中以$n定义光标定位的位置,从1开始,展开后光标就定位在$1,然后按TAB键在不同的位置间移动,碰到$0时退出模版,开始输入自定义项。
这里有一个限制,就是修改时必须把$1-$n-$0的整个流程走完一遍你才可以写自己想写的东西。所以在$4那里就出了一件我很不爽的事,self后面的逗号,我的__init__是无参的,我可以把para删掉,但是我删不掉逗号,原因是流程还没走完,你不可做流程以外的事情。我必须TAB到$0然后再把光标移上去删除一个逗号。
于是我找到文件所在的地方,修改了__init__的模版,把逗号放到$4当中去,这样我跳过它的时候,逗号也一并消失了。
Just for fun.
装一个不?它们的项目首页是:yasnippet
相关文章:
Did you enjoy this post? Why not leave a comment below and continue the conversation, or subscribe to my feed and get articles like this delivered automatically to your feed reader.





Yasnippet 载入模板太多了,导致 Emacs 蜗牛启动,不用的时候只好把它注释了。