<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>右舷 &#187; yasnippet</title>
	<atom:link href="http://www.laihj.net/tag/yasnippet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.laihj.net</link>
	<description>list(linux,emacs,旅行,读书,andriod,MacOS,iOS)</description>
	<lastBuildDate>Tue, 27 Dec 2011 12:54:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>emacs代码补完－yasnippet</title>
		<link>http://www.laihj.net/2010/01/code-complete-yasnippet/</link>
		<comments>http://www.laihj.net/2010/01/code-complete-yasnippet/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 01:38:30 +0000</pubDate>
		<dc:creator>laihj</dc:creator>
				<category><![CDATA[利其器]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[yasnippet]]></category>

		<guid isPermaLink="false">http://www.laihj.net/?p=650075</guid>
		<description><![CDATA[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)
 [...]]]></description>
			<content:encoded><![CDATA[<p>Email:hamainter(AT)gmail.com<br />
<embed src="http://player.youku.com/player.php/sid/XMTQzODY1OTQw/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed></p>
<p>yasnippet是emacs的一款代码补完插件，类似于一个代码模版。基本用法就是“TAB”，输入关键字之后按TAB键，YASnippet根据预先设定的模版来展开代码。很好玩。</p>
<p>YASnippte有两种安装方法，一种是视频中使用的单el文件yasnippet-bundle.el，配置也简单一点，只要在你的.emacs文件中添加以下代码就可以了。</p>
<pre name="code" class="css">
  (add-to-list 'load-path
             "~/.emacs.d/plugins")
  (require 'yasnippet-bundle)
</pre>
<p>还有一种涉及多个文件，一个是yasnippet.el,还有一个存放模版文件的文件夹，里面按照不同的mode存放模版。相应的，你的配置文件中需要配置el文件的位置和模版文件夹所在的位置。</p>
<pre name="code" class="css">
    (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")
</pre>
<p>二者使用起来是一样的。不过很明显的区别在于，单文件模式是指模版也完全整合到yasnippet-bundle.el文件中了，修改起来很麻烦。</p>
<p>而修改模版在我看来是必须的。因为原始的mode模本一般不太可能符合所有人的需要，至少我现在手上的版本来看，质量只能算是一般而已，令人不爽的，需要修改的地方还是很多的。另外，emacs的乐趣不就是完全可定制么？一个调教之前的emacs基本上并不比gedit高明多个，以上是个人意见。</p>
<p>所以我个人推荐多文件的安装方法。安装配置之后进入emacs，看到界面基本上是这样的。</p>
<p><img src="http://www.laihj.net/wp-content/uploads/2010/01/yasnippet.png" alt="yasnippet" title="yasnippet" width="699" height="432" class="alignnone size-full wp-image-650076" /></p>
<p>而文件结构基本上是这样</p>
<pre name="code" class="c">
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
</pre>
<p>它与snippet文件夹里的文件成一一对应关系。也就是说，你需要修改哪个模版，只需要在snippet文件夹中找到相应的文件对它进行修改就可以了。</p>
<pre name="code" class="sh">
class ${1:ClassName}(${2:object}):
    """$3
    """

    def __init__(self，${4:para}):
        $0
</pre>
<p>以上是python中class的模版，不是原始的，我去掉了init中比较复杂的部分。定义了yasnippet这样的行为：</p>
<p>在emacs的python-mode中，你输入了&#8221;class&#8221;，然后按一下TAB,编辑器将自动给你填出如下代码段。</p>
<pre name="code" class="py">
    class ClassName(object):
    """
    """

    def __init__(self，para):
</pre>
<p>并且光标停留在&#8221;ClassName&#8221;上，因为模版中$1位于这里。你可以对它进行修改。这里提一个模版的简单语法，模版中以$n定义光标定位的位置，从1开始，展开后光标就定位在$1,然后按TAB键在不同的位置间移动，碰到$0时退出模版，开始输入自定义项。</p>
<p>这里有一个限制，就是修改时必须把$1-$n-$0的整个流程走完一遍你才可以写自己想写的东西。所以在$4那里就出了一件我很不爽的事，self后面的逗号，我的__init__是无参的，我可以把para删掉，但是我删不掉逗号，原因是流程还没走完，你不可做流程以外的事情。我必须TAB到$0然后再把光标移上去删除一个逗号。</p>
<p>于是我找到文件所在的地方，修改了__init__的模版，把逗号放到$4当中去，这样我跳过它的时候，逗号也一并消失了。</p>
<p>Just for fun.</p>
<p>装一个不？它们的项目首页是：<a href="http://code.google.com/p/yasnippet/">yasnippet</p>
<h3>Related Posts</h3><ul><li><a href="http://www.laihj.net/2010/03/editors-learning-curves/" title="编辑器的学习曲线 2010.03.3">编辑器的学习曲线</a>(0)</li>
<li><a href="http://www.laihj.net/2010/02/execute-compile-current-file/" title="[elisp]用elisp编译解释当前的buffer 2010.02.12">[elisp]用elisp编译解释当前的buffer</a>(0)</li>
<li><a href="http://www.laihj.net/2010/02/elisp-emacs-editing-basics/" title="[elisp]针对Emacs中文本编辑的编程简介 2010.02.3">[elisp]针对Emacs中文本编辑的编程简介</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/elipsemacslisp-basi/" title="[elisp]EmacsLisp 基础 2010.01.31">[elisp]EmacsLisp 基础</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-remember/" title="Emacs的orgmode [remember] 2010.01.20">Emacs的orgmode [remember]</a>(4)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-tags/" title="Emacs的orgmode [tags］ 2010.01.15">Emacs的orgmode [tags］</a>(0)</li>
<li><a href="http://www.laihj.net/2010/01/emacs-orgmode-archieved/" title="Emacs的orgmode [归档］ 2010.01.2">Emacs的orgmode [归档］</a>(1)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-agenda-view/" title="Emacs的org-mode [agenda view] 2009.12.29">Emacs的org-mode [agenda view]</a>(0)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode-%e6%97%a5%e6%9c%9f%e4%b8%8e%e6%97%b6%e9%97%b4/" title="Emacs的org-mode [日期与时间] 2009.12.26">Emacs的org-mode [日期与时间]</a>(1)</li>
<li><a href="http://www.laihj.net/2009/12/emacs%e7%9a%84org-mode%ef%bc%bbtodo%ef%bc%bd/" title="Emacs的org-mode［TODO］ 2009.12.25">Emacs的org-mode［TODO］</a>(0)</li>
</ul><h3>Recent Comments</h3><ul><li><a class="commentor" href="" >happybabe</a> : <a class="comment_content" href="http://www.laihj.net/2010/01/code-complete-yasnippet/#comment-68" title="View the entire comment by happybabe" >Yasnippet 载入模板太多了，导致 Emacs 蜗牛启动，不用的时候只好把它注释了。</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://www.laihj.net/2010/01/code-complete-yasnippet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

