<?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>harry.blog &#187; vim</title>
	<atom:link href="http://blog.harrspy.com/tag/vim/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.harrspy.com</link>
	<description>留住往昔的美丽，去开创未来的光明。</description>
	<lastBuildDate>Wed, 01 Sep 2010 14:30:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>推荐一个Vim插件 vim-addon-manager</title>
		<link>http://blog.harrspy.com/vim-addon-manager</link>
		<comments>http://blog.harrspy.com/vim-addon-manager#comments</comments>
		<pubDate>Wed, 01 Sep 2010 14:30:35 +0000</pubDate>
		<dc:creator>harry</dc:creator>
				<category><![CDATA[harry]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://blog.harrspy.com/?p=236</guid>
		<description><![CDATA[vim-addon-manager 是一个非常有用的插件，至少对我来说是这样的，看名字就知道是用来管理vim插件的，用它可以在vim里快速的安装其他插件，就像在linux里通过软件包管理工具安装软件那样方便。 不过我用这玩意的最大原因不是因为可以方便的安装插件，而是它可以让你把vim的每一个插件都放在一个独立的目录下，这样就不会和其他插件的文件混在一起了。 想想以前，要装个新vim插件，就是下载下来解压后往.vim目录里一扔，然后所有插件都混在一起，什么plugin了，autoload了，ftplugin了等各个目录里混杂着各种插件的文件，时间久了到底装了多少插件都不知道，想干净的删除一个插件要费老大力，因为删除plugin目录里的文件后可能在其他目录还有一些文件。 现在有了这个工具，我删掉了用了多年的.vim目录，重新整理了一下，每个插件一个单独目录，添加删除非常方便，哈哈。 这是以前的.vim目录，所有东西都混在一起 现在的，多干净，哈哈 所有插件都放在addons目录里，每个插件单独放在一个子目录中，这个addons目录的位置是可以配置在vimrc里的，这样再多插件也不会混乱啦，哈哈。 插件地址  http://www.vim.org/scripts/script.php?script_id=2905 具体如何配置使用可以看这个地址 http://github.com/MarcWeber/vim-addon-manager/blob/master/doc/vim-addon-manager.txt]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vim.org/scripts/script.php?script_id=2905">vim-addon-manager </a> 是一个非常有用的插件，至少对我来说是这样的，看名字就知道是用来管理vim插件的，用它可以在vim里快速的安装其他插件，就像在linux里通过软件包管理工具安装软件那样方便。</p>
<p>不过我用这玩意的最大原因不是因为可以方便的安装插件，而是它可以让你把vim的每一个插件都放在一个独立的目录下，这样就不会和其他插件的文件混在一起了。</p>
<p>想想以前，要装个新vim插件，就是下载下来解压后往.vim目录里一扔，然后所有插件都混在一起，什么plugin了，autoload了，ftplugin了等各个目录里混杂着各种插件的文件，时间久了到底装了多少插件都不知道，想干净的删除一个插件要费老大力，因为删除plugin目录里的文件后可能在其他目录还有一些文件。</p>
<p>现在有了这个工具，我删掉了用了多年的.vim目录，重新整理了一下，每个插件一个单独目录，添加删除非常方便，哈哈。</p>
<p><img class="alignnone" src="http://pic.yupoo.com/harryxu/ArpxwcMM/pLYOG.png" alt="" width="399" height="590" /></p>
<p>这是以前的.vim目录，所有东西都混在一起</p>
<p><img class="alignnone" src="http://pic.yupoo.com/harryxu/ArprZXQo/HXQK8.png" alt="" /></p>
<p>现在的，多干净，哈哈</p>
<p><img class="alignnone" src="http://pic.yupoo.com/harryxu/Arprz3ZU/JpBZL.png" alt="" width="370" height="409" /></p>
<p>所有插件都放在addons目录里，每个插件单独放在一个子目录中，这个addons目录的位置是可以配置在vimrc里的，这样再多插件也不会混乱啦，哈哈。</p>
<p>插件地址  <a href="http://www.vim.org/scripts/script.php?script_id=2905">http://www.vim.org/scripts/script.php?script_id=2905</a></p>
<p>具体如何配置使用可以看这个地址 <a href="http://github.com/MarcWeber/vim-addon-manager/blob/master/doc/vim-addon-manager.txt">http://github.com/MarcWeber/vim-addon-manager/blob/master/doc/vim-addon-manager.txt</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.harrspy.com/vim-addon-manager/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>neocomplcache与其他一些插件还真难相处阿</title>
		<link>http://blog.harrspy.com/neocomplcache-stuff</link>
		<comments>http://blog.harrspy.com/neocomplcache-stuff#comments</comments>
		<pubDate>Tue, 04 May 2010 14:08:37 +0000</pubDate>
		<dc:creator>harry</dc:creator>
				<category><![CDATA[harry]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://blog.harrspy.com/?p=222</guid>
		<description><![CDATA[无聊装了个neocomplcache试下，初步用下来感觉效果的确不错，不过要和 snipMate superTab zencoding插件和谐共存还是要设置一下。。。 首先如果你不需要让他自动启用 （不加 let g:NeoComplCache_EnableAtStartup = 1），或者不需要让他自动弹出提示 （加了 let g:NeoComplCache_DisableAutoComplete = 1），那似乎就不用设置什么了。 如果用了 zencoding.vim，那么vimrc里面不要有 let g:use_zen_complete_tag = 1 ，如果加了这句会使NeoComplCache自动启用那句没做用。。。 另外如果要 snipMate 和 superTab的话，也要修改下，因为snipMate为了与superTab兼容，在提示菜单弹出的时候是不会展开的，即使你修改了触发snipMate的热键也没用，他只会执行superTab的动作。。。 所以我就想把snipMate为了兼容superTab的代码去掉。 打开 ~/.vim/plugin/snipMate.vim 134行开始 134 135 136 137 138 139 140 if pumvisible&#40;&#41; if exists&#40;'SuperTabKey'&#41; call feedkeys&#40;SuperTabKey&#41; &#124; return '' endif call feedkeys&#40;&#34;\&#60;esc&#62;a&#34;, 'n'&#41; call feedkeys&#40;&#34;\&#60;tab&#62;&#34;&#41; &#124; return '' [...]]]></description>
			<content:encoded><![CDATA[<p>无聊装了个<a href="http://www.vim.org/scripts/script.php?script_id=2620" target="_blank">neocomplcache</a>试下，初步用下来感觉效果的确不错，不过要和 snipMate superTab zencoding插件和谐共存还是要设置一下。。。</p>
<p>首先如果你不需要让他自动启用 （不加 <code>let g:NeoComplCache_EnableAtStartup = 1</code>），或者不需要让他自动弹出提示 （加了 <code>let g:NeoComplCache_DisableAutoComplete = 1</code>），那似乎就不用设置什么了。</p>
<p>如果用了 zencoding.vim，那么vimrc里面不要有 <code>let g:use_zen_complete_tag = 1</code> ，如果加了这句会使NeoComplCache自动启用那句没做用。。。</p>
<p>另外如果要 snipMate 和 superTab的话，也要修改下，因为snipMate为了与superTab兼容，在提示菜单弹出的时候是不会展开的，即使你修改了触发snipMate的热键也没用，他只会执行superTab的动作。。。</p>
<p>所以我就想把snipMate为了兼容superTab的代码去掉。<br />
<del datetime="2010-08-22T13:55:58+00:00">打开 ~/.vim/plugin/snipMate.vim 134行开始</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>134
135
136
137
138
139
140
</pre></td><td class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #804040;">if</span> <span style="color: #25BB4D;">pumvisible</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
  <span style="color: #804040;">if</span> <span style="color: #25BB4D;">exists</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'SuperTabKey'</span><span style="color: #000000;">&#41;</span>
    <span style="color: #804040;">call</span> <span style="color: #25BB4D;">feedkeys</span><span style="color: #000000;">&#40;</span>SuperTabKey<span style="color: #000000;">&#41;</span> <span style="color: #000000;">|</span> <span style="color: #804040;">return</span> <span style="color: #C5A22D;">''</span>
  <span style="color: #804040;">endif</span>
  <span style="color: #804040;">call</span> <span style="color: #25BB4D;">feedkeys</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;<span style="">\&lt;</span>esc&gt;a&quot;</span>, <span style="color: #C5A22D;">'n'</span><span style="color: #000000;">&#41;</span> 
  <span style="color: #804040;">call</span> <span style="color: #25BB4D;">feedkeys</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;<span style="">\&lt;</span>tab&gt;&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">|</span> <span style="color: #804040;">return</span> <span style="color: #C5A22D;">''</span>
<span style="color: #804040;">endif</span></pre></td></tr></table></div>

<p></del></p>
<p><code><font color="#FF0000">---------------- 2010-08-22 更新 --------------</font></code><br />
根据snipMate<a href="http://github.com/msanders/snipmate.vim/blob/504fcdf50b9ad75a7936d1cb3b46fcbd0ceb3eed/plugin/snipMate.vim#L159">在github中的最新代码</a>，从149行，开始，从新调整一下TriggerSnippet函数，并且下面再增加一个小函数</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
</pre></td><td class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #804040;">fun</span><span style="color: #000000;">!</span> TriggerSnippet<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
	<span style="color: #804040;">if</span> <span style="color: #25BB4D;">exists</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'g:SuperTabMappingForward'</span><span style="color: #000000;">&#41;</span>
		<span style="color: #804040;">if</span> g<span style="color: #000000;">:</span>SuperTabMappingForward == <span style="color: #C5A22D;">&quot;&lt;tab&gt;&quot;</span>
			<span style="color: #804040;">let</span> SuperTabKey = <span style="color: #C5A22D;">&quot;<span style="">\&lt;</span>c-n&gt;&quot;</span>
		<span style="color: #804040;">elseif</span> g<span style="color: #000000;">:</span>SuperTabMappingBackward == <span style="color: #C5A22D;">&quot;&lt;tab&gt;&quot;</span>
			<span style="color: #804040;">let</span> SuperTabKey = <span style="color: #C5A22D;">&quot;<span style="">\&lt;</span>c-p&gt;&quot;</span>
		<span style="color: #804040;">endif</span>
	<span style="color: #804040;">endif</span>
&nbsp;
	<span style="color: #804040;">if</span> <span style="color: #25BB4D;">exists</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'g:snipPos'</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">|</span> <span style="color: #804040;">return</span> snipMate#jumpTabStop<span style="color: #000000;">&#40;</span>0<span style="color: #000000;">&#41;</span> <span style="color: #000000;">|</span> <span style="color: #804040;">endif</span>
&nbsp;
	<span style="color: #804040;">let</span> word = <span style="color: #25BB4D;">matchstr</span><span style="color: #000000;">&#40;</span><span style="color: #25BB4D;">getline</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'.'</span><span style="color: #000000;">&#41;</span>, <span style="color: #C5A22D;">'<span style="">\S</span><span style="">\+</span><span style="">\%</span>'</span><span style="color: #000000;">.</span><span style="color: #25BB4D;">col</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'.'</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">.</span><span style="color: #C5A22D;">'c'</span><span style="color: #000000;">&#41;</span>
	<span style="color: #804040;">for</span> scope <span style="color: #804040;">in</span> <span style="color: #000000;">&#91;</span><span style="color: #25BB4D;">bufnr</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'%'</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">+</span> <span style="color: #25BB4D;">split</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&amp;</span>ft, <span style="color: #C5A22D;">'<span style="">\.</span>'</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">+</span> <span style="color: #000000;">&#91;</span><span style="color: #C5A22D;">'_'</span><span style="color: #000000;">&#93;</span>
		<span style="color: #804040;">let</span> <span style="color: #000000;">&#91;</span>trigger, snippet<span style="color: #000000;">&#93;</span> = s<span style="color: #000000;">:</span>GetSnippet<span style="color: #000000;">&#40;</span>word, scope<span style="color: #000000;">&#41;</span>
		<span style="color: #C5A22D;">&quot; If word is a trigger for a snippet, delete the trigger &amp; expand
		&quot;</span> the snippet<span style="color: #000000;">.</span>
		<span style="color: #804040;">if</span> snippet <span style="color: #000000;">!</span>= <span style="color: #C5A22D;">''</span>
			<span style="color: #804040;">if</span> <span style="color: #25BB4D;">exists</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'g:loaded_neocomplcache'</span><span style="color: #000000;">&#41;</span>
				<span style="color: #804040;">let</span> g<span style="color: #000000;">:</span>neocomplcache_disable_auto_complete = 1
				inoremap <span style="color: #000000;">&lt;</span>ESC<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;</span>ESC<span style="color: #000000;">&gt;:</span><span style="color: #804040;">call</span> SetNeocomplBack<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&lt;</span>CR<span style="color: #000000;">&gt;</span>
				snoremap <span style="color: #000000;">&lt;</span>ESC<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;</span>ESC<span style="color: #000000;">&gt;:</span><span style="color: #804040;">call</span> SetNeocomplBack<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&lt;</span>CR<span style="color: #000000;">&gt;</span>
			<span style="color: #804040;">endif</span>
			<span style="color: #804040;">let</span> <span style="color: #25BB4D;">col</span> = <span style="color: #25BB4D;">col</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'.'</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">-</span> <span style="color: #25BB4D;">len</span><span style="color: #000000;">&#40;</span>trigger<span style="color: #000000;">&#41;</span>
			sil <span style="color: #804040;">exe</span> <span style="color: #C5A22D;">'s/<span style="">\V</span>'</span><span style="color: #000000;">.</span><span style="color: #25BB4D;">escape</span><span style="color: #000000;">&#40;</span>trigger, <span style="color: #C5A22D;">'/<span style="">\.</span>'</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">.</span><span style="color: #C5A22D;">'<span style="">\%</span>#//'</span>
			<span style="color: #804040;">return</span> snipMate#expandSnip<span style="color: #000000;">&#40;</span>snippet, <span style="color: #25BB4D;">col</span><span style="color: #000000;">&#41;</span>
		<span style="color: #804040;">endif</span>
	<span style="color: #804040;">endfor</span>
&nbsp;
	<span style="color: #804040;">if</span> <span style="color: #25BB4D;">exists</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">'SuperTabKey'</span><span style="color: #000000;">&#41;</span>
		<span style="color: #804040;">call</span> <span style="color: #25BB4D;">feedkeys</span><span style="color: #000000;">&#40;</span>SuperTabKey<span style="color: #000000;">&#41;</span>
		<span style="color: #804040;">return</span> <span style="color: #C5A22D;">''</span>
	<span style="color: #804040;">endif</span>
	<span style="color: #804040;">return</span> <span style="color: #C5A22D;">&quot;<span style="">\&lt;</span>tab&gt;&quot;</span>
endf
&nbsp;
<span style="color: #804040;">fun</span><span style="color: #000000;">!</span> SetNeocomplBack<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
	<span style="color: #804040;">let</span> g<span style="color: #000000;">:</span>neocomplcache_disable_auto_complete = <span style="color: #000000; font-weight:bold;">0</span>
	inoremap <span style="color: #000000;">&lt;</span>ESC<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;</span>ESC<span style="color: #000000;">&gt;</span>
	snoremap <span style="color: #000000;">&lt;</span>ESC<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;</span>ESC<span style="color: #000000;">&gt;</span>
endf</pre></td></tr></table></div>

<p><code>-----------------------------------------------</code></p>
<p>这几句注释掉后就行了，不管是否兼容了，反正用了NeoComplCache自动提示，superTab的作用也体现不出多少了，主要是为了可以用tab键来选择提示菜单中的项目。<br />
还有个办法不需要修改snipMate的代码就是修改superTab的热键，但是如果改掉的话那还能叫superTab不？ 哈哈<br />
这里也有个参考，不过他是把NeoComplCache的自动提示关闭了。<br />
<a href="http://sinolog.it/?p=1399" target="_blank">http://sinolog.it/?p=1399</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.harrspy.com/neocomplcache-stuff/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>在Vim里玩Zen Coding</title>
		<link>http://blog.harrspy.com/zen-coding-in-vim</link>
		<comments>http://blog.harrspy.com/zen-coding-in-vim#comments</comments>
		<pubDate>Tue, 24 Nov 2009 14:55:11 +0000</pubDate>
		<dc:creator>harry</dc:creator>
				<category><![CDATA[harry]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[zen-coding]]></category>

		<guid isPermaLink="false">http://blog.harryxu.cn/?p=208</guid>
		<description><![CDATA[更新 2010/3/14: 推荐使用原生vim脚本写的Zen coding插件，无须调用外部程序。 Zen Coding？ 其实我看下来有点类似snippet的代码模板，用来提高编码效率，但是 Zen Coding 是针对html编写的，可以用一系列快捷的方式生成html代码，从而提高编码的效率，并且感觉还挺有乐趣的。 比如可以用类似css选择器的语法来快速生成html，输入 div#header.content &#62; ul &#62; li*3 &#62; a 就可以生成下面的html代码 &#60;div class=&#34;content&#34; id=&#34;header&#34;&#62; &#60;ul&#62; &#60;li&#62; &#60;a href=&#34;&#34;&#62;&#60;/a&#62; &#60;/li&#62; &#60;li&#62; &#60;a href=&#34;&#34;&#62;&#60;/a&#62; &#60;/li&#62; &#60;li&#62; &#60;a href=&#34;&#34;&#62;&#60;/a&#62; &#60;/li&#62; &#60;/ul&#62; &#60;/div&#62; 介绍： Zen Coding: A Speedy Way To Write HTML/CSS Code 里面有个 vimeo上的视频，需要翻墙看。。。 googlecode上有个zen-coding的项目，为一些编辑器开发了相关插件，不过似乎暂时没有Vim相关的插件。 我找到了另一个项目 Sparkup。 这是一个类似zen-coding的项目，主程序也是用Python开发，提供了一个vim的脚本。 使用方式也是很简单，下载后把sparkup这个文件放到用户目录下的bin目录里，然后按照里面vim/sparkup.vim里的注释来就行了。 也有视频演示，Youtube上的，所以也要翻墙 [...]]]></description>
			<content:encoded><![CDATA[<p style="color:red;">
<strong>更新 2010/3/14:</strong><br />
推荐使用原生vim脚本写的<a href="http://www.vim.org/scripts/script.php?script_id=2981" target="_blank">Zen coding插件</a>，无须调用外部程序。</p>
<p>Zen Coding？ 其实我看下来有点类似snippet的代码模板，用来提高编码效率，但是 Zen Coding 是针对html编写的，可以用一系列快捷的方式生成html代码，从而提高编码的效率，并且感觉还挺有乐趣的。</p>
<p>比如可以用类似css选择器的语法来快速生成html，输入 <code>div#header.content &gt; ul &gt; li*3 &gt; a</code> 就可以生成下面的html代码</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;content&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;header&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div>

<p>介绍：<br />
<a href="http://www.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/" target="_blank">Zen Coding: A Speedy Way To Write HTML/CSS Code</a><br />
里面有个 <a href="http://vimeo.com/7405114" target="_blank">vimeo上的视频</a>，需要翻墙看。。。</p>
<p>googlecode上有个<a href="http://code.google.com/p/zen-coding/" target="_blank">zen-coding</a>的项目，为一些编辑器开发了相关插件，不过似乎暂时没有Vim相关的插件。</p>
<p>我找到了另一个项目 <a href="http://github.com/rstacruz/sparkup" target="_blank" >Sparkup</a>。<br />
这是一个类似zen-coding的项目，主程序也是用Python开发，提供了一个vim的脚本。<br />
使用方式也是很简单，下载后把sparkup这个文件放到用户目录下的bin目录里，然后按照里面vim/sparkup.vim里的注释来就行了。<br />
也有<a href="http://www.youtube.com/watch?v=Jw3jipcenKc" target="_blank">视频演示</a>，Youtube上的，所以也要翻墙 &#8211; -</p>
<p>如果是要在Windows下使用，我用<a href="http://www.py2exe.org/" target="_blank">py2exe</a>将sparkup转换成exe了，然后把这个exe的所在目录加到环境变量里就能用了。</p>
<p>这个项目提供的那个vim脚本用起来要改vimrc，而且使用source方式，要考虑脚本的路径，我改了下，改成插件方式了，把下面的代码保存成 sparkup.vim 放到vim的plugin目录中就行。<br />
还有我把快捷键改成 <code>Ctrl + k</code> 了，输入snippet后按下快捷键就能生成代码。</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;">&quot; Sparkup</span>
<span style="color: #adadad; font-style: italic;">&quot; Installation:</span>
<span style="color: #adadad; font-style: italic;">&quot; Put it in ~/.vim/plugin</span>
<span style="color: #adadad; font-style: italic;">&quot;</span>
<span style="color: #668080;">autocmd</span> FileType html,php <span style="color: #804040;">call</span> KeyMapping<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
&nbsp;
<span style="color: #804040;">function</span><span style="color: #000000;">!</span> KeyMapping<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #25BB4D;">map</span> <span style="color: #000000;">&lt;</span>C<span style="color: #000000;">-</span>k<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;</span>Esc<span style="color: #000000;">&gt;:.!</span>sparkup<span style="color: #000000;">&lt;</span>Cr<span style="color: #000000;">&gt;:</span><span style="color: #804040;">call</span> SparkupNext<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&lt;</span>Cr<span style="color: #000000;">&gt;</span>
    imap <span style="color: #000000;">&lt;</span>C<span style="color: #000000;">-</span>k<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;</span>Esc<span style="color: #000000;">&gt;:.!</span>sparkup<span style="color: #000000;">&lt;</span>Cr<span style="color: #000000;">&gt;:</span><span style="color: #804040;">call</span> SparkupNext<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&lt;</span>Cr<span style="color: #000000;">&gt;</span>
    <span style="color: #C5A22D;">&quot;map &lt;C-n&gt; &lt;Esc&gt;:call SparkupNext()&lt;Cr&gt;
    &quot;</span>imap <span style="color: #000000;">&lt;</span>C<span style="color: #000000;">-</span>n<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;</span>Esc<span style="color: #000000;">&gt;:</span><span style="color: #804040;">call</span> SparkupNext<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&lt;</span>Cr<span style="color: #000000;">&gt;</span>
endfunction
&nbsp;
<span style="color: #804040;">function</span><span style="color: #000000;">!</span> SparkupNext<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #C5A22D;">&quot; 1: empty tag, 2: empty attribute, 3: empty line
    let n = search('&gt;&lt;<span style="">\/</span><span style="">\|</span><span style="">\(</span>&quot;</span><span style="color: #C5A22D;">&quot;<span style="">\)</span><span style="">\|</span>^<span style="">\s</span>*$', 'Wp')
    if n == 3
        startinsert!
    else
        execute 'normal l'
        startinsert
    endif
endfunction</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.harrspy.com/zen-coding-in-vim/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>debian 下 gVim 不显示菜单栏的解决办法</title>
		<link>http://blog.harrspy.com/repair-deiban-gnome-vim-menubar</link>
		<comments>http://blog.harrspy.com/repair-deiban-gnome-vim-menubar#comments</comments>
		<pubDate>Sun, 21 Dec 2008 04:43:02 +0000</pubDate>
		<dc:creator>harry</dc:creator>
				<category><![CDATA[harry]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[我的系统是 debian 桌面环境是 gnome，用 gvim 的时候菜单栏一直都不显示，虽然不影响平时使用，不过有时候想用某个不常用的命令，到菜单里面去找下也很方便的。 今天搜了下，找到个解决办法。 就是打开 ~/.gnome2/Vim ，里面原来的内容是 [Placement] Dock=Toolbar\\0,0,0,0\\Menubar\\0,0,0,0 把第二行改成 Dock=Toolbar\\0,1,0,0\\Menubar\\0,0,0,0 这样就行了。]]></description>
			<content:encoded><![CDATA[<p>我的系统是 debian 桌面环境是 gnome，用 gvim 的时候菜单栏一直都不显示，虽然不影响平时使用，不过有时候想用某个不常用的命令，到菜单里面去找下也很方便的。</p>
<p>今天搜了下，找到个<a href="http://groups.google.com/group/linux.debian.bugs.dist/browse_thread/thread/e83d0f59ee777f6f" target="_blank">解决办法</a>。</p>
<p>就是打开 ~/.gnome2/Vim ，里面原来的内容是</p>
<pre>
[Placement]
Dock=Toolbar\\0,0,0,0\\Menubar\\0,0,0,0
</pre>
<p>把第二行改成</p>
<pre>
Dock=Toolbar\\0,1,0,0\\Menubar\\0,0,0,0
</pre>
<p>这样就行了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.harrspy.com/repair-deiban-gnome-vim-menubar/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>用Vim写django程序时omni失效的问题</title>
		<link>http://blog.harrspy.com/django-with-vim-omni-issue</link>
		<comments>http://blog.harrspy.com/django-with-vim-omni-issue#comments</comments>
		<pubDate>Thu, 18 Dec 2008 13:28:40 +0000</pubDate>
		<dc:creator>harry</dc:creator>
				<category><![CDATA[harry]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[只要在 PYTHONPATH 中的程序，用Vim的时候就能够使用omni智能提示功能。 最近新学django，所以把用django-admin 生成的项目目录加入到PYTHONPATH，这样就能使用Vim的omni对这个项目里的模块实现代码提示功能了。 但是用了不久后，发现对某些模块操作时omni功能失效了- -，研究了一下发现是只要导入了django.db.models的模块，智能提示就会失效。 然后我在终端的python中单独导入django 的 models 模块，发现会有异常，原因是那个 django.db 里面会导入 django.conf.settings 对象，然后还会去设置他的属性，这一下就玩完了，因为那里面会检查系统的 DJANGO_SETTINGS_MODULE 值，可以在django/conf/__init__.py中的LazySettings这个类里看到，如果没的话就有异常了。 这个系统值应该是启动server的时候设置的，可以在manager.py里面看到。 这样一来肯定是由于Vim的python omni程序导入模块时一旦碰到异常就不继续了，所以智能提示失效了。 为此我在导入django的models时做了下处理 try: from django.db import models except ImportError: from django.core import management management.setup_environ&#40;settings&#41; from django.db import models 哈哈，这样就好了，那个settings是当前项目中的settings模块。 要是有更好的办法欢迎提示阿。]]></description>
			<content:encoded><![CDATA[<p>只要在 PYTHONPATH 中的程序，用Vim的时候就能够使用omni智能提示功能。<br />
最近新学django，所以把用django-admin 生成的项目目录加入到PYTHONPATH，这样就能使用Vim的omni对这个项目里的模块实现代码提示功能了。</p>
<p>但是用了不久后，发现对某些模块操作时omni功能失效了-  -，研究了一下发现是只要导入了django.db.models的模块，智能提示就会失效。</p>
<p>然后我在终端的python中单独导入django 的 models 模块，发现会有异常，原因是那个 django.db 里面会导入 django.conf.settings 对象，然后还会去设置他的属性，这一下就玩完了，因为那里面会检查系统的 DJANGO_SETTINGS_MODULE 值，可以在django/conf/__init__.py中的LazySettings这个类里看到，如果没的话就有异常了。<br />
这个系统值应该是启动server的时候设置的，可以在manager.py里面看到。</p>
<p>这样一来肯定是由于Vim的python omni程序导入模块时一旦碰到异常就不继续了，所以智能提示失效了。</p>
<p>为此我在导入django的models时做了下处理</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">try</span>:
    <span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">db</span> <span style="color: #ff7700;font-weight:bold;">import</span> models
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">ImportError</span>:
    <span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">core</span> <span style="color: #ff7700;font-weight:bold;">import</span> management
    management.<span style="color: black;">setup_environ</span><span style="color: black;">&#40;</span>settings<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">db</span> <span style="color: #ff7700;font-weight:bold;">import</span> models</pre></div></div>

<p>哈哈，这样就好了，那个settings是当前项目中的settings模块。<br />
要是有更好的办法欢迎提示阿。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.harrspy.com/django-with-vim-omni-issue/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Vim中的代码补全</title>
		<link>http://blog.harrspy.com/about_vim_autocomplete</link>
		<comments>http://blog.harrspy.com/about_vim_autocomplete#comments</comments>
		<pubDate>Sat, 18 Oct 2008 07:34:25 +0000</pubDate>
		<dc:creator>harry</dc:creator>
				<category><![CDATA[harry]]></category>
		<category><![CDATA[AutoComplete]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[总结了一下我用Vim时，对代码补全功能的一些设置。 有兴趣的可以到我们的 Wiki 看下，欢迎补充。]]></description>
			<content:encoded><![CDATA[<p>总结了一下我用Vim时，对代码补全功能的一些设置。</p>
<p>有兴趣的可以到<a href="http://wiki.geckos.cn/index.php/Vim%E4%B8%AD%E7%9A%84%E4%BB%A3%E7%A0%81%E8%A1%A5%E5%85%A8" target="_blank">我们的 Wiki 看下</a>，欢迎补充。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.harrspy.com/about_vim_autocomplete/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>借vim中支持Java的相关代码来改进asdoc在vim中的编辑和显示</title>
		<link>http://blog.harrspy.com/improve-actionscript-vim-with-java-vim</link>
		<comments>http://blog.harrspy.com/improve-actionscript-vim-with-java-vim#comments</comments>
		<pubDate>Wed, 17 Sep 2008 14:20:21 +0000</pubDate>
		<dc:creator>harry</dc:creator>
				<category><![CDATA[harry]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[平时一直用 manish jethani 的 actionscript.vim 来支持AS3代码在 vim中的高亮显示。 但在vim中编辑过Java代码的同学都知道，用vim写java代码会有许多便捷。 比如写javadoc的时候，输入/** 后 再回车，会自动补上一个 * 类似 /** * 像 @param xxx xxx 这样的关键字都会高亮显示，并且javadoc中的html也会高亮显示。 其实，这些都是vim自带了为编辑java实现的，想来javadoc和asdoc其实也相差无几，今天把vim中syntax/java.vim里的一些代码借过来放到 actionscript.vim 中，还真好用额.. 需要的话可以下载我修改过的 actionscript.vim 要实现 /** 换行后自动补上 * 可以把 ftplugin/java.vim 复制到 ftplugin/actionscript.vim 即可]]></description>
			<content:encoded><![CDATA[<p>平时一直用 manish jethani 的 <a href="http://geocities.com/manish_jethani/actionscript.vim" target="_blank">actionscript.vim</a> 来支持AS3代码在 vim中的高亮显示。</p>
<p>但在vim中编辑过Java代码的同学都知道，用vim写java代码会有许多便捷。</p>
<p>比如写javadoc的时候，输入/** 后 再回车，会自动补上一个 *  类似</p>
<pre>
/**
 *
</pre>
<p>像 @param xxx xxx 这样的关键字都会高亮显示，并且javadoc中的html也会高亮显示。</p>
<p>其实，这些都是vim自带了为编辑java实现的，想来javadoc和asdoc其实也相差无几，今天把vim中syntax/java.vim里的一些代码借过来放到 actionscript.vim 中，还真好用额..</p>
<p>需要的话可以下载我修改过的 <a href="http://dl.getdropbox.com/u/130618/downloads/actionscript.vim" target="_blank">actionscript.vim</a></p>
<p>要实现 /** 换行后自动补上 * 可以把 ftplugin/java.vim 复制到 ftplugin/actionscript.vim 即可</p>
<p><a href="http://i3.6.cn/cvbnm/45/56/11/b8a2f14b506e750a740ea8f0021450cc.jpg" rel="lightbox"><img src="http://i3.6.cn/cvbnm/45/56/11/b8a2f14b506e750a740ea8f0021450cc.nail.jpg" alt="" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.harrspy.com/improve-actionscript-vim-with-java-vim/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
