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,看到界面基本上是这样的。

yasnippet

而文件结构基本上是这样

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

相关文章:

右舷

↑ Grab this Headline Animator

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.

Comments

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

Leave a comment

(required)

(required)