<?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>YY in Limbo 混沌海狂想 &#187; OpenSource</title>
	<atom:link href="http://www.limboy.com/category/geek/os/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.limboy.com</link>
	<description>这里既空虚又充实，没有规则，没有约束，创造来自思考，生存依赖想像，现实源自梦想</description>
	<lastBuildDate>Fri, 07 Oct 2011 19:33:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>一个美术宅的传奇</title>
		<link>http://www.limboy.com/2011/05/02/tiles-legend/</link>
		<comments>http://www.limboy.com/2011/05/02/tiles-legend/#comments</comments>
		<pubDate>Mon, 02 May 2011 01:12:33 +0000</pubDate>
		<dc:creator>Dexter.Yy</dc:creator>
				<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://www.limboy.com/?p=401</guid>
		<description><![CDATA[不论2D还是3D时代，游戏开发总是“美术密集型”的项目，假如把程序比作骨架和器官，把剧情设定和gameplay之类都比作灵魂，那么美工创造出来就是实实在在的血肉，是游戏中绝大部分的“内容”。对于非美工出身的独立游戏创作者，这些“内容”的来源总是一个大难题，当然总有些取巧的题材或设计能绕过这个槛，但是也总能看到那些成功的例子都离不开丰满的视觉内容，甚至是独特的艺术风格，比如iOS平台上最火的那些“小制作”：有Grimm的Edward Gorey式维多利亚哥特，有Rolando搭上的芬兰插画家，还有最近Sword &#038; Sworcery EP那“淡淡忧伤”的像素画风……
实际上对那些想要制作游戏的宅男们来说，美工背景有天然优势，程序员离不开心灵手巧的美工，而美工却能不依赖可怜的程序员，这主要是因为程序员们有一种根深蒂固深入骨髓的恶习叫作“抽象”和“复用”，他们总是不甘心只把想要的东西简简单单实现出来，总是忍不住去把其中通用的、不变的、能反复利用的部分提取出来，完善成库、框架、引擎和工具，有极少数头脑发热耳鸣眼花鼻塞手贱腿抽筋的人甚至会继续折腾出一套“不需要编程”就能自由创作的强大工具……在这些资源和技术宅的帮助下，很多美术宅和性幻想达人们都顺畅的踏上了游戏制作之路……可参考《欢迎加入NHK!》里的山崎薫和佐藤，或现实世界里的武内崇和奈须蘑菇……
好罢以上都是“技术宅你们伤不起”系列的吐槽，其实不会写程序就像束缚了手脚去爬山，同样很辛苦。我想说的是，相对于代码和软件，可复用的美术资源实在是太稀缺了，如果你也曾经在网上搜寻过免费完整的游戏开发资源，一定体验过那种浪费大量时间仍一无所获的挫折感。
而今天要讲的，是一个站出来挑战这种现状的平凡宅男的故事。
国外有一些独立游戏为了回馈社区，会释出一些自己使用的代码和资源，如果留意过相关的声明，会发现很多开发者都注明“图像来自Reiner Prokein”，其中Ambardia网站上提供下载的那些帖图（tile）资源最壮观最让人惊喜：

而这些也都是同一个人创作的。
这个人没有wiki词条，在mobygames上没有介绍，一点名气都没有，但他有一个叫Reiner&#8217;s Tilesets的网站（旧版，新版），提供更海量的资源，全部是自己绘制，全部以freeware形式提供下载，没有任何好看的许可协议（比如CC-BY或GPL），没有任何限制，允许商业使用，允许随意修改，唯一的要求是你确实用它们做游戏（不准直接转卖），并且在商业作品的Credits名单里要包含他的名字。
那是一个更传奇式的名字，叫作Reiner &#8220;Tiles&#8221; Prokein，他是德国人，一直梦想制作自己的电脑游戏。最开始他不懂编程——他基本上什么都不懂，但他没有放弃，没有畏首畏尾，从99年秋天开始，他决定寻找一种不用编程就能制作游戏的软件。
他找到了前辈ambro的神帖：Ambrosine&#8217;s Game Creation Resources &#038; Classic Game Links
他逐个尝试，最后喜欢上rpgmaker 95，开始制作自己的第一个小型RPG。这个游戏完成了，但从来没有公开过，因为他后来得知破解版的rpgmaker有合法性方面的问题。
在这个过程中，他发现网络上缺乏用于制作游戏的免费图像资源，便开始自己绘制，最初他一个像素一个像素的手绘，接下来他发现了TrueSpace（Caligari公司推出的3D图形和动画渲染工具，现在已经被微软收购，用于虚拟地球项目，可免费下载），开始学习所有跟图像渲染有关的知识。
因为不会编程，Reiner制作游戏的努力始终伴随着挫折感，而学习编程看上去又遥不可及。但他没有放弃，他继续搜寻，又发现了rpgmaker.net，在这个社区里能找到大量处于beta甚至alpha阶段的游戏制作软件，他开始参与到rpgstudio的开发中，为它创作帖图资源，并且从那个时候起开始建设自己的主页，也就是“Reiner&#8217;s Tilesets”，那是2000年春天。
但是要完成一个像rpgstudio这样的项目，所需时间远超他的想象，而这个项目最后也被废止了。
他仍然想要做游戏，这次他找到了MMF（Multimedia Fusion）的主页，来自法国Clickteam公司的这款软件前身就是著名的《游戏工厂》（TGF），只需要点击和托拽就能完成程序逻辑，还有大量扩展，Reiner觉得他终于找到了自己想要的，全心全意的投入其中。已经是2000年冬天。
2007年，Reiner在主页上更新了自己的近况，七年过去了，他没有拿出什么引入注目的游戏，不过他声称在尝试开发3D游戏，他现在主要用3D Gamestudio ，MMF有时也用，这意味着他不再像以前那样惧怕编程了，至少学习了一点lite-C（脚本语言）
2010年，Reiner再次更新，原来过去三年他都在克服某些身体健康方面的问题，从Caligari公司接的一些软件测试工作也耗费了他很多时间，总之他没有完成那个3D游戏，但是跟以往的文字一样，他喜欢在段落的末尾用笑脸代替句号：“But i never give up, and i don&#8217;t stop dreaming :)”
2011年春天，Reiner用wordpress重建了自己的tileset网站，没有德国游戏门户4players.de和广告的支持，他必须自己支付服务器费用了，末尾仍然没忘记笑脸：“But i am more than willing to pay this price :)”
这个故事还没结束，在99~00年的高潮之后，也许一直都会这么平淡无奇，但不知为什么让我觉得很温暖，忍不住分享一下。
【UPDATE】 刚才仔细查了一下mobygames，在《Eschalon: Book I》（Basilisk工作室著名的独立RPG）的Credits里，看到了Reiner Prokein的名字！
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.limboy.com/wp-content/uploads/2011/05/tilexp.png"><img src="http://www.limboy.com/wp-content/uploads/2011/05/tilexp.png"   class="alignnone size-full wp-image-410" style="float:left;margin:0 10px 10px 0" /></a>不论2D还是3D时代，游戏开发总是“美术密集型”的项目，假如把程序比作骨架和器官，把剧情设定和gameplay之类都比作灵魂，那么美工创造出来就是实实在在的血肉，是游戏中绝大部分的“内容”。对于非美工出身的独立游戏创作者，这些“内容”的来源总是一个大难题，当然总有些<a href="http://forum.fr2db.fr/topic17135.html" target="_blank">取巧的题材或设计</a>能绕过这个槛，但是也总能看到那些成功的例子都离不开丰满的视觉内容，甚至是独特的艺术风格，比如iOS平台上最火的那些“小制作”：有<a href="http://roboxstudios.com/grimm/" target="_blank">Grimm</a>的Edward Gorey式维多利亚哥特，有Rolando搭上的<a href="http://cargocollective.com/mikkowalamies" target="_blank">芬兰插画家</a>，还有最近<a href="http://www.swordandsworcery.com/artwork/" target="_blank">Sword &#038; Sworcery EP</a>那“淡淡忧伤”的像素画风……</p>
<p>实际上对那些想要制作游戏的宅男们来说，美工背景有天然优势，程序员离不开心灵手巧的美工，而美工却能不依赖可怜的程序员，这主要是因为程序员们有一种根深蒂固深入骨髓的恶习叫作“抽象”和“复用”，他们总是不甘心只把想要的东西简简单单实现出来，总是忍不住去把其中通用的、不变的、能反复利用的部分提取出来，完善成库、框架、引擎和工具，有极少数头脑发热耳鸣眼花鼻塞手贱腿抽筋的人甚至会继续折腾出一套“不需要编程”就能自由创作的强大工具……在这些资源和技术宅的帮助下，很多美术宅和性幻想达人们都顺畅的踏上了游戏制作之路……可参考<a target="_blank" href="http://zh.wikipedia.org/zh/%E6%AD%A1%E8%BF%8E%E5%8A%A0%E5%85%A5NHK!">《欢迎加入NHK!》</a>里的山崎薫和佐藤，或现实世界里的<a href="http://zh.wikipedia.org/wiki/%E6%AD%A6%E5%86%85%E5%B4%87" target="_blank">武内崇</a>和<a href="http://zh.wikipedia.org/zh-cn/%E5%A5%88%E9%A0%88%E7%A3%A8%E8%8F%87" target="_blank">奈须蘑菇</a>……<span id="more-401"></span></p>
<p>好罢以上都是“技术宅你们伤不起”系列的吐槽，其实不会写程序就像束缚了手脚去爬山，同样很辛苦。我想说的是，相对于代码和软件，可复用的美术资源实在是太稀缺了，如果你也曾经在网上搜寻过免费完整的游戏开发资源，一定体验过那种浪费大量时间仍一无所获的挫折感。</p>
<p>而今天要讲的，是一个站出来挑战这种现状的平凡宅男的故事。</p>
<p>国外有一些独立游戏为了回馈社区，会释出一些自己使用的代码和资源，如果留意过相关的声明，会发现很多开发者都注明“图像来自Reiner Prokein”，其中<a target="_blank" href="http://www.ambardia.com/FreeGraphics/FreeGraphics.html">Ambardia网站</a>上提供下载的那些帖图（tile）资源最壮观最让人惊喜：</p>
<p><a target="_blank" href="http://www.limboy.com/wp-content/uploads/2011/05/Screen-shot-2011-05-02-at-4.11.50-AM.png"><img src="http://www.limboy.com/wp-content/uploads/2011/05/Screen-shot-2011-05-02-at-4.11.50-AM.png"  class="alignnone size-full wp-image-406" style="width:500px" /></a></p>
<p>而这些也都是同一个人创作的。</p>
<p>这个人没有wiki词条，在mobygames上没有介绍，一点名气都没有，但他有一个叫Reiner&#8217;s Tilesets的网站（<a href="http://reinerstileset.4players.de/" target="_blank">旧版</a>，<a href="http://www.reinerstilesets.de" target="_blank">新版</a>），提供更海量的资源，全部是自己绘制，全部以freeware形式提供下载，没有任何好看的许可协议（比如CC-BY或GPL），没有任何限制，允许商业使用，允许随意修改，唯一的要求是你确实用它们做游戏（不准直接转卖），并且在商业作品的Credits名单里要包含他的名字。</p>
<p>那是一个更传奇式的名字，叫作Reiner &#8220;Tiles&#8221; Prokein，他是德国人，一直梦想制作自己的电脑游戏。最开始他不懂编程——他基本上什么都不懂，但他没有放弃，没有畏首畏尾，从99年秋天开始，他决定寻找一种不用编程就能制作游戏的软件。</p>
<p>他找到了前辈ambro的神帖：<a target="_blank" href="http://www.ambrosine.com/resource.php">Ambrosine&#8217;s Game Creation Resources &#038; Classic Game Links</a></p>
<p>他逐个尝试，最后喜欢上<a target="_blank" href="http://zh.wikipedia.org/wiki/RPG%E8%A3%BD%E4%BD%9C%E5%A4%A7%E5%B8%AB">rpgmaker 95</a>，开始制作自己的第一个小型RPG。这个游戏完成了，但从来没有公开过，因为他后来得知破解版的rpgmaker有合法性方面的问题。</p>
<p>在这个过程中，他发现网络上缺乏用于制作游戏的免费图像资源，便开始自己绘制，最初他一个像素一个像素的手绘，接下来他发现了TrueSpace（Caligari公司推出的3D图形和动画渲染工具，现在已经被微软收购，用于虚拟地球项目，可免费下载），开始学习所有跟图像渲染有关的知识。</p>
<p>因为不会编程，Reiner制作游戏的努力始终伴随着挫折感，而学习编程看上去又遥不可及。但他没有放弃，他继续搜寻，又发现了<a href="http://rpgmaker.net/" target="_blank">rpgmaker.net</a>，在这个社区里能找到大量处于beta甚至alpha阶段的游戏制作软件，他开始参与到rpgstudio的开发中，为它创作帖图资源，并且从那个时候起开始建设自己的主页，也就是“Reiner&#8217;s Tilesets”，那是2000年春天。</p>
<p>但是要完成一个像rpgstudio这样的项目，所需时间远超他的想象，而这个项目最后也被废止了。</p>
<p>他仍然想要做游戏，这次他找到了MMF（Multimedia Fusion）的主页，来自法国Clickteam公司的这款软件前身就是著名的《游戏工厂》（TGF），只需要点击和托拽就能完成程序逻辑，还有大量扩展，Reiner觉得他终于找到了自己想要的，全心全意的投入其中。已经是2000年冬天。</p>
<p>2007年，Reiner在主页上更新了自己的近况，七年过去了，他没有拿出什么<a href="http://www.reinerstilesets.de/spiele/" target="_blank">引入注目的游戏</a>，不过他声称在尝试开发3D游戏，他现在主要用3D Gamestudio ，MMF有时也用，这意味着他不再像以前那样惧怕编程了，至少学习了一点lite-C（脚本语言）</p>
<p>2010年，Reiner再次更新，原来过去三年他都在克服某些身体健康方面的问题，从Caligari公司接的一些软件测试工作也耗费了他很多时间，总之他没有完成那个3D游戏，但是跟以往的文字一样，他喜欢在段落的末尾用笑脸代替句号：“<strong>But i never give up, and i don&#8217;t stop dreaming :)</strong>”</p>
<p>2011年春天，Reiner用wordpress重建了自己的tileset网站，没有德国游戏门户4players.de和广告的支持，他必须自己支付服务器费用了，末尾仍然没忘记笑脸：“<strong>But i am more than willing to pay this price :)</strong>”</p>
<p>这个故事还没结束，在99~00年的高潮之后，也许一直都会这么平淡无奇，但不知为什么让我觉得很温暖，忍不住分享一下。</p>
<p><strong>【UPDATE】</strong> 刚才仔细查了一下mobygames，在《Eschalon: Book I》（Basilisk工作室著名的独立RPG）的<a target="_blank" href="http://www.mobygames.com/game/windows/eschalon-book-i/credits">Credits</a>里，看到了Reiner Prokein的名字！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limboy.com/2011/05/02/tiles-legend/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google I/O大会keynote摘要</title>
		<link>http://www.limboy.com/2010/05/20/google-io-summary/</link>
		<comments>http://www.limboy.com/2010/05/20/google-io-summary/#comments</comments>
		<pubDate>Wed, 19 May 2010 19:10:19 +0000</pubDate>
		<dc:creator>Dexter.Yy</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[web服务/应用]]></category>

		<guid isPermaLink="false">http://www.limboy.com/?p=274</guid>
		<description><![CDATA[


VP8开源，免专利费，发布新的web视频格式 WebM

WebM的组成包括：VP8（视频编码） + Vorbis（音频编码） + Matroska（即mkv，容器格式） ，文件后缀.webm
VP8的FAQ：http://www.webmproject.org/about/faq/
来自x264开发者的VP8深度技术分析：http://x264dev.multimedia.cx/?p=377


 


几乎所有浏览器厂商都宣布支持VP8：

Chromium：http://build.chromium.org/buildbot/snapshots 
Chrome在24号更新 
Firefox：http://nightly.mozilla.org/webm/ 
Opera：http://labs.opera.com/news/2010/05/19/ 
微软宣布IE9将支持VP8：http://windowsteamblog.com/windows/b/bloggingwindows/archive/2010/05/19/another-follow-up-on-html5-video-in-ie9.aspx 
Adobe在会上宣布flash支持webm/VP8，这样flash将支持5种codec：Screen sharing, Spark, VP6, H.264, VP8 


 

Adobe发布HTML5开发工具

dreamweaver的HTML5 Pack：http://labs.adobe.com/technologies/html5pack/
同时测试多种浏览器设备（Multiscreen Preview panel）
支持编辑和渲染CSS3，包括动画，有一个demo看上去很像用flash开发广告banner


  

Chrome Web Store

帮助用户寻找web app，可以在Chrome app tab上创建软件的快捷方式：http://code.google.com/chrome/apps/
内建支付系统，支持付费软件
包含flash软件
包含Native Client应用（原生程序＋HTML5 API），3D游戏可以全屏运行
包含出版物，演示了HTML5 magazine


  

Google Wave正式开放，包含一堆API和扩展机制，跟gmail整合

  

API更新

Font API：http://code.google.com/apis/webfonts/
Feed API支持PubSubHubbub：http://googleajaxsearchapi.blogspot.com/2010/05/google-feed-api-now-with-instant.html
Maps API v3从labs里毕业


  

Google Web Toolkit 和 Google Ap Engine

跟VMware合作，整合 GWT 和 Spring（SpringSource Tool Suite， [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.limboy.com/2010/05/20/google-io-summary/"><img src="http://code.google.com/events/images/io2010logo.png" alt="" style="margin:0 10px 10px 0;float:left;width:240px" /></a>
<ol>
<li>
<h3>VP8开源，免专利费，发布新的web视频格式 WebM</h3>
<ul>
<li>WebM的组成包括：VP8（视频编码） + Vorbis（音频编码） + Matroska（即mkv，容器格式） ，文件后缀.webm</li>
<li>VP8的FAQ：<a href="http://www.webmproject.org/about/faq/">http://www.webmproject.org/about/faq/</a></li>
<li>来自x264开发者的VP8深度技术分析：<a href="http://x264dev.multimedia.cx/?p=377">http://x264dev.multimedia.cx/?p=377</a></li>
</ul>
</li>
<p> <br/><br />
<span id="more-274"></span></p>
<li>
<h3>几乎所有浏览器厂商都宣布支持VP8：</h3>
<ul>
<li>Chromium：<a href="http://build.chromium.org/buildbot/snapshots">http://build.chromium.org/buildbot/snapshots</a> </li>
<li>Chrome在24号更新 </li>
<li>Firefox：<a href="http://nightly.mozilla.org/webm/">http://nightly.mozilla.org/webm/</a> </li>
<li>Opera：<a href="http://labs.opera.com/news/2010/05/19/">http://labs.opera.com/news/2010/05/19/</a> </li>
<li>微软宣布IE9将支持VP8：<a href="http://windowsteamblog.com/windows/b/bloggingwindows/archive/2010/05/19/another-follow-up-on-html5-video-in-ie9.aspx">http://windowsteamblog.com/windows/b/bloggingwindows/archive/2010/05/19/another-follow-up-on-html5-video-in-ie9.aspx</a> </li>
<li>Adobe在会上宣布flash支持webm/VP8，这样flash将支持5种codec：Screen sharing, Spark, VP6, H.264, VP8 </li>
</ul>
</li>
<p> <br/></p>
<li>
<h3>Adobe发布HTML5开发工具</h3>
<ul>
<li>dreamweaver的HTML5 Pack：<a href="http://labs.adobe.com/technologies/html5pack/">http://labs.adobe.com/technologies/html5pack/</a></li>
<li>同时测试多种浏览器设备（Multiscreen Preview panel）</li>
<li>支持编辑和渲染CSS3，包括动画，有一个demo看上去很像用flash开发广告banner</li>
</ul>
</li>
<p>  <br/></p>
<li>
<h3>Chrome Web Store</h3>
<ul>
<li>帮助用户寻找web app，可以在Chrome app tab上创建软件的快捷方式：<a href="http://code.google.com/chrome/apps/">http://code.google.com/chrome/apps/</a></li>
<li>内建支付系统，支持付费软件</li>
<li>包含flash软件</li>
<li>包含Native Client应用（原生程序＋HTML5 API），3D游戏可以全屏运行</li>
<li>包含出版物，演示了HTML5 magazine</li>
</ul>
</li>
<p>  <br/></p>
<li>
<h3>Google Wave正式开放，包含一堆API和扩展机制，跟gmail整合</h3>
</li>
<p>  <br/></p>
<li>
<h3>API更新</h3>
<ul>
<li>Font API：<a href="http://code.google.com/apis/webfonts/">http://code.google.com/apis/webfonts/</a></li>
<li>Feed API支持PubSubHubbub：<a href="http://googleajaxsearchapi.blogspot.com/2010/05/google-feed-api-now-with-instant.html">http://googleajaxsearchapi.blogspot.com/2010/05/google-feed-api-now-with-instant.html</a></li>
<li>Maps API v3从labs里毕业</li>
</ul>
</li>
<p>  <br/></p>
<li>
<h3>Google Web Toolkit 和 Google Ap Engine</h3>
<ul>
<li>跟VMware合作，整合 GWT 和 Spring（SpringSource Tool Suite， Spring Roo）<a href="http://www.springsource.org/node/2595">http://www.springsource.org/node/2595</a></li>
<li>GWT 2.1 Widget Libraries，支持移动设备</li>
<li>Google Ap Engine企业版</li>
</ul>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.limboy.com/2010/05/20/google-io-summary/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>继续补充vim配置技巧——上次的vimrc还不够强力</title>
		<link>http://www.limboy.com/2009/06/07/vim-setting-more/</link>
		<comments>http://www.limboy.com/2009/06/07/vim-setting-more/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 18:52:27 +0000</pubDate>
		<dc:creator>Dexter.Yy</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[工具]]></category>

		<guid isPermaLink="false">http://www.limboy.com/2009/06/07/vim-setting-more/</guid>
		<description><![CDATA[首先要补充一些MacVim的配置，其实写上篇文章的时候我还在用已经过时的基于Carbon界面的vim for osx，更接近传统的unix版本，但是好久没更新，只支持vim6.0，soureforge上有一个7.2的版本，bug诸多，其中的乱码和字体抗锯齿的问题让我完全无法忍。而MacVim是基于Cocoa开发，支持到7.2，还含有很多讨好mac用户的设计，比如对标签的良好支持，华丽的界面（背景颜色支持透明度，字体抗锯齿更漂亮，几乎跟TextMate的效果没区别）……非常后悔以前没仔细试用这个版本！目前为止只发现行高linespace的设置会无法生效，不过这个bug在最新的快照版里已经修正了。
插播一个道歉：由于spam太多，我前段时间在wordpress黑名单里加了一个很苛刻的条件，把所有评论都挡到待审核列表里去了，好像还直接删了一部分……咳……
我在.vimrc里增加了一些专门针对MacVim的设置：
if has(&#34;gui_macvim&#34;)
&#160; &#34;取消默认的快捷键
&#160; let macvim_skip_cmd_opt_movement = 1 
&#160; let macvim_hig_shift_movement = 1
&#160; 
&#160; &#34;设置背景透明度
&#160; set transparency=2
&#160; &#34;隐藏工具条
&#160; set guioptions-=T &#34;egmrt
&#160; 
&#160; &#34;绑定自己需要的cmd快捷键
&#160; macm File.Save&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; key=&#60;D-s&#62;
&#160; macm File.Save\ As\.\.\.&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; key=&#60;D-S&#62;
&#160; macm [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.limboy.com/wp-content/uploads/2009/06/picture-4.png' title='picture-4.png' target="_blank"><img src='http://www.limboy.com/wp-content/uploads/2009/06/picture-4.png' alt='picture-4.png' style="width:200px;margin:0 10px 10px 0;float:left;" /></a>首先要补充一些<a href="http://code.google.com/p/macvim/" target="_blank">MacVim</a>的配置，其实写上篇文章的时候我还在用已经过时的<a href="http://macvim.org/OSX/index.php" target="_blank">基于Carbon界面的vim for osx</a>，更接近传统的unix版本，但是好久没更新，只支持vim6.0，soureforge上有一个<a href="http://sourceforge.net/project/showfiles.php?group_id=213254" target="_blank">7.2的版本</a>，bug诸多，其中的乱码和字体抗锯齿的问题让我完全无法忍。而MacVim是基于Cocoa开发，支持到7.2，还含有很多讨好mac用户的设计，比如对标签的良好支持，华丽的界面（背景颜色支持透明度，字体抗锯齿更漂亮，几乎跟TextMate的效果没区别）……非常后悔以前没仔细试用这个版本！目前为止只发现行高linespace的设置会无法生效，不过这个bug在<a href="http://code.google.com/p/macvim/wiki/Snapshot" target="_blank">最新的快照版</a>里已经修正了。</p>
<p>插播一个道歉：由于spam太多，我前段时间在wordpress黑名单里加了一个很苛刻的条件，把所有评论都挡到待审核列表里去了，好像还直接删了一部分……咳……<span id="more-236"></span></p>
<p>我在.vimrc里增加了一些专门针对MacVim的设置：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">if has(&quot;gui_macvim&quot;)</li>
<li>&nbsp; &quot;取消默认的快捷键</li>
<li>&nbsp; let macvim_skip_cmd_opt_movement = 1 </li>
<li>&nbsp; let macvim_hig_shift_movement = 1</li>
<li>&nbsp; </li>
<li>&nbsp; &quot;设置背景透明度</li>
<li>&nbsp; set transparency=2</li>
<li>&nbsp; &quot;隐藏工具条</li>
<li>&nbsp; set guioptions-=T &quot;egmrt</li>
<li>&nbsp; </li>
<li>&nbsp; &quot;绑定自己需要的cmd快捷键</li>
<li>&nbsp; macm File.Save&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key=&lt;D-s&gt;</li>
<li>&nbsp; macm File.Save\ As\.\.\.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key=&lt;D-S&gt;</li>
<li>&nbsp; macm Edit.Undo&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key=&lt;D-z&gt; action=undo:</li>
<li>&nbsp; macm Edit.Redo&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key=&lt;D-Z&gt; action=redo:</li>
<li>&nbsp; macm Edit.Cut&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;key=&lt;D-x&gt; action=cut:</li>
<li>&nbsp; macm Edit.Copy&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key=&lt;D-c&gt; action=copy:</li>
<li>&nbsp; macm Edit.Paste&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;key=&lt;D-v&gt; action=paste:</li>
<li>&nbsp; macm Edit.Select\ All&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;key=&lt;D-A&gt; action=selectAll:</li>
<li>endif</li></ol></div>
<p>之所以要取消MacVim默认的一些快捷键是因为它们都占用了cmd苹果键，而我习惯用这个键来替代ctrl在vim里的作用（在mbp的键盘上就算我想用ctrl也不方便……），不过其中有几个快捷键是非常非常有价值的，比如保存（省去了输入:w的麻烦），全选（否则要摁六下：ggVG），复制粘贴剪切（否则为了使用剪贴板，比如猛摁这种玩意：&#8221;+y，还不能在插入模式下使用 ），幸好它们的快捷键都不跟vim其他操作冲突，所以自己设置。为了完全删除MacVim默认的cmd快捷键，还需要打开app中自带的vimrc文件（可以这样编辑：:tabe $VIM/vimrc ），删除末尾那些macm开头的代码。<br />
<br/><br />
MacVim的安装包里包含一个mvim，是像gvim一样的脚本，用来在命令行中调用GUI版的vim，但是mvim默认会在新窗口打开文件，我相信多数人都喜欢在当前窗口的新标签页里打开罢，需要在命令后加&#8211;remote-tab参数，不过<a href="http://webexpose.org/2008/10/13/open-macvim-tabs-from-command-line" target="_blank">这篇文章</a>里给出了直接修改脚本的方法，把mvim底部从# Last step:  fire up vim开始的部分删掉，改成：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">tabs=true </li>
<li>&nbsp;</li>
<li># Last step:&nbsp; fire up vim. </li>
<li>if [ &quot;$gui&quot; ]; then </li>
<li>	if $tabs &amp;&amp; [[ `$binary --serverlist` = &quot;VIM&quot; ]]; then</li>
<li>	&nbsp; &nbsp;	exec &quot;$binary&quot; -g $opts --remote-tab-silent ${1:+&quot;$@&quot;} </li>
<li>	else </li>
<li>		exec &quot;$binary&quot; -g $opts ${1:+&quot;$@&quot;} </li>
<li>	fi </li>
<li>else </li>
<li>	exec &quot;$binary&quot; $opts ${1:+&quot;$@&quot;} </li>
<li>fi</li></ol></div>
<p>P.S. 上面给出的那个blog不能直接打开，也许是需要翻墙，不过我顺便介绍一个很方便的利用google网页快照的方法～ 用<a href="http://translate.google.cn/translate_t#zh-CN|en|" target="_blank">谷歌翻译</a>打开这个网址 XD<br />
<br/><br />
刚安装好的MacVim打开gb编码的文件仍然把中文显示成乱码（好无奈，GBK编码是土豆网的历史遗留问题，页面里的script标签也几乎都没加charset=&#8221;utf-8&#8243;，所以大部分js文件都只好用gb18030的编码，textmate正是因为不支持gb编码才被我降为二等公民的，其实我有正版cdkey……），我在.vimrc里加上了encoding似乎能解决这个问题：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">set encoding=utf-8</li>
<li>set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936</li></ol></div>
<p>解释一下：对于编码，vim里有三个设置选项，encoding是设置vim以何种编码显示文件（缩写enc），fileencoding是当前文件实际的编码（缩写fenc）， 而fileencodings指示vim如何解码（缩写fencs），因此vim在打开一个文件时实际上会先根据fileencodings里的列表反复测试，直到成功解码，转换成encoding指定的编码，然后正常显示，转码的过程是用iconv实现的（所以windows上用vim还要配置iconv的dll路径和参数……麻烦），保存的时候会根据fileencoding来保存，跟是否显示为乱码没有关系。</p>
<p>所以如果想转换一个文件的编码，比如从utf-8转换到gb18030，可以在编辑器中直接输入两个命令：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">:set enc=gb18030</li>
<li>:set fenc=gb18030</li></ol></div>
<p>然后保存就ok了～其实如果不用继续编辑的话，第一行都可以省去，因为它的目的只是让编辑器用gb18030来显示当前文件，避免乱码，但是并不影响文件保存时的编码和正确性。</p>
<p>以前我都是依赖mac上的<a href="http://www.panic.com/coda/" target="_blank">Coda</a>来转换编码（确实最方便）……vim又成功了抢了它的饭碗……<br />
<br/><br />
MacVim还有一个问题是会显示一个很宅很不人性的标签栏名称，比如我编辑/usr/local/bin/mvim这个文件，标签栏上写的是“/u/l/b/mvim”，如果目录结构再深一点就看不到真正的文件名了，在.vimrc里加入下面这行可以让标签栏只显示文件名：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">set guitablabel=%t</li></ol></div>
<p><br/><br />
上次的.vimrc里还增加了两处很重要的设置，主要是受这位老爷写的<a href="http://easwy.com/blog/archives/advanced-vim-skills-catalog/" target="_blank">《vim使用进阶》</a>的启发，首先是让.vimrc每次编辑保存后自动生效，避免重启：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">autocmd! bufwritepost .vimrc source ~/.vimrc</li></ol></div>
<p>autocmd实际上是vim脚本的事件机制，表示在某个事件触发后自动执行的命令<br />
<br/><br />
接下来要实现的是保存和恢复编辑器的当前状态，类似Eclipse的Workspace，不过vim的session更强大，几乎可以还原一切状态……<a href="http://easwy.com/blog/archives/advanced-vim-skills-session-file-and-viminfo/" target="_blank">Easwy老爷介绍的命令</a>比较繁琐，缺乏“一键恢复”的快感……身为一个习惯使用“高级语言”的程序员，在这种时候就抑制不住继续封装和提高抽象层的欲望……所以自定义了以下两个命令：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">function! GetMySession(spath, ssname)</li>
<li>	if a:ssname == 0</li>
<li>		let a:sname = &quot;&quot;</li>
<li>	else</li>
<li>		let a:sname = &quot;-&quot;.a:ssname</li>
<li>	endif</li>
<li>	execute &quot;source $&quot;.a:spath.&quot;/session&quot;.a:sname.&quot;.vim&quot;</li>
<li>	execute &quot;rviminfo $&quot;.a:spath.&quot;/session&quot;.a:sname.&quot;.viminfo&quot;</li>
<li>	execute &quot;echo \&quot;Load Success\: $&quot;.a:spath.&quot;/session&quot;.a:sname.&quot;.vim\&quot;&quot;</li>
<li>endfunction</li>
<li>&nbsp;</li>
<li>function! SetMySession(spath, ssname)</li>
<li>	if a:ssname == 0</li>
<li>		let a:sname = &quot;&quot;</li>
<li>	else</li>
<li>		let a:sname = &quot;-&quot;.a:ssname</li>
<li>	endif</li>
<li>	execute &quot;cd $&quot;.a:spath</li>
<li>	execute &quot;mksession! $&quot;.a:spath.&quot;/session&quot;.a:sname.&quot;.vim&quot;</li>
<li>	execute &quot;wviminfo! $&quot;.a:spath.&quot;/session&quot;.a:sname.&quot;.viminfo&quot;</li>
<li>	execute &quot;echo \&quot;Save Success\: $&quot;.a:spath.&quot;/session&quot;.a:sname.&quot;.vim\&quot;&quot;</li>
<li>endfunction</li>
<li>&nbsp;</li>
<li>&quot; load session from certain path</li>
<li>command! -nargs=+ LOAD call GetMySession(&lt;f-args&gt;) </li>
<li>&nbsp;</li>
<li>&quot; load session from certain path</li>
<li>command! -nargs=+ SAVE call SetMySession(&lt;f-args&gt;)</li></ol></div>
<p>为了用最简单的方法选择路径，使用时需要先在终端的初始化脚本（比如~/.bashrc，在我的OSX系统里通常用~/.profile）里添加相应的环境变量，比如我常用的三个路径：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">export TUISVN=&quot;/Users/dexteryy/Sites/Tudou/ui/ui/&quot;</li>
<li>export TUIDEV=&quot;/Volumes/ui.tudou.com/&quot;</li>
<li>export MYWEB=&quot;/Users/dexteryy/Sites/www/&quot;</li></ol></div>
<p>当我在MYWEB的路径下做项目的时候，如果需要保存当前状态，只要输入:SAVE MYWEB 0就行了，这里的0是因为考虑到在同一个工作目录里可能需要使用到不同文件组合的工作区，提供的一个简单的版本号，这段命令执行后会在/Users/dexteryy/Sites/www/目录里生成两个文件： session.viminfo和session.vim，如果版本号是大于0的整数，比如2，文件名会是session2.viminfo和session2.viminfo</p>
<p>需要恢复的时候只要输入命令：:LOAD MYWEB 0  就行叻～</p>
<p>喔对了，为了能在VIM命令里使用bash中定义的变量，你需要在MacVim的preferences里把“Launch Vim processes in a login shell”勾选，熟悉Mac应用的同学应该都能想到这个设置会记录在/Library/Preferences/或~/Library/Preferences/里的某个配置文件里，MacVim对应的是~/Library/Preferences/org.vim.MacVim.plist，所以你也可以直接用这个命令在终端里修改：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">defaults write org.vim.MacVim MMLoginShell 1</li></ol></div>
<p>如果使用的是Gvim或windows版本的vim，也可以直接把路径变量写在.vimrc里，比如：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">let g:TUISVN=&quot;/Users/dexteryy/Sites/Tudou/ui/ui/&quot;</li></ol></div>
<p>然后修改上面的两个函数GetMySession和SetMySession，把a:spath前面的$都删掉…………因为VIM里的变量只能由大写字母开头……</p>
<p>完整的<a href="http://code.google.com/p/yy-vimscript/source/browse/trunk/vimrc">.vimrc</a>在这里…………呃好罢我发现google code真是备份和维护配置脚本的好地方XD<br />
<br/><br />
最后继续讨论一下插件～</p>
<p>首先是<a href="http://www.vim.org/scripts/script.php?script_id=273" target="_blank">Taglist</a>，这是一个能让vim具备类似Aptana的<a href="http://aptana.com/docs/index.php/Displaying_the_Outline_View" target="_blank">Outline View</a>的功能，还能像JAVA的IDE那样通过类名和方法名直接跳转到相应的源码，它借助了一个叫ctags的工具，可以解析源码生成标签文件（在同一个名录下，叫tags），详细的介绍请参考<a href="http://easwy.com/blog/archives/advanced-vim-skills-use-ctags-tag-file/" target="_blank">Easwy老爷的文章</a>，记得务必安装最新版的Exuberant Ctags……我是用MacPorts装的：sudo port install ctags</p>
<p>Exuberant Ctags号称支持34种语言，包括javascript，但是它对javascript的理解非常OUT……比如现在定义JS方法几乎主要依靠匿名函数了，ctags却无法识别这种形式……</p>
<p>已经<a href="http://weblogs.asp.net/george_v_reilly/archive/2009/03/24/exuberant-ctags-and-javascript.aspx" target="_blank">有人</a>在尝试自己添加匹配规则，我自己也写了一大坨：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">--langdef=js</li>
<li>--langmap=js:.js</li>
<li>--regex-js=/[ \t.]([A-Z][A-Z0-9._$]+)[ \t]*=[ \t]*[0-9&quot;'\[\{]/\1/n,constant/</li>
<li>--regex-js=/([A-Za-z0-9._$]+)[ \t]*=[ \t]*\{/\1/o,object/</li>
<li>--regex-js=/['&quot;]*([A-Za-z0-9_$]+)['&quot;]*[ \t]*:[ \t]*\{/\1/o,object/</li>
<li>--regex-js=/([A-Za-z0-9._$]+)\[[&quot;']([A-Za-z0-9_$]+)[&quot;']\][ \t]*=[ \t]*\{/\1\.\2/o,object/</li>
<li>--regex-js=/([A-Za-z0-9._$]+)\.prototype[ \t.=]/\1/c,class/</li>
<li>--regex-js=/([A-Za-z0-9._$]+)[ \t]*=[ \t]*\(function\(\)/\1/c,class/</li>
<li>--regex-js=/['&quot;]*([A-Za-z0-9_$]+)['&quot;]*:[ \t]*\(function\(\)/\1/c,class/</li>
<li>--regex-js=/var[ \t]*([A-Za-z$][A-Za-z0-9_$()]+)[ \t]*=[ \t]*function[ \t]*\(/\1/f,function/</li>
<li>--regex-js=/function[ \t]+([A-Za-z$][A-Za-z0-9_$]+)[ \t]*\(([^)])\)/\1/f,function/</li>
<li>--regex-js=/['&quot;]*([A-Za-z$][A-Za-z0-9_$]+)['&quot;]*:[ \t]*function[ \t]*\(/\1/m,method/</li>
<li>--regex-js=/([A-Za-z$][A-Za-z0-9_$]+)[ \t]*=[ \t]*function[ \t]*\(/\1/m,method/</li>
<li>--regex-js=/([A-Za-z0-9_$]+)\[[&quot;']([A-Za-z0-9_$]+)[&quot;']\][ \t]*=[ \t]*function[ \t]*\(/\2/m,method/</li>
<li>--regex-js=/([A-Za-z0-9._$]+)[ \t]*=[ \t]*\[/\1/a,array/</li>
<li>--regex-js=/['&quot;]*([A-Za-z$][A-Za-z0-9_$]+)['&quot;]*:[ \t]*\[/\1/a,array/</li>
<li>--regex-js=/([A-Za-z0-9._$]+)\[[&quot;']([A-Za-z0-9_$]+)[&quot;']\][ \t]*=[ \t]*\[/\1\.\2/a,array/</li></ol></div>
<p>匹配以下语法形式，其中粗体部分是标签名称：</p>
<ol>
<li>var <strong>MY_CONSTANT</strong> = 250; //constant</li>
<li><strong>ns.myobject</strong> = {}; //object</li>
<li><strong>myobject</strong>: {}, //object</li>
<li>ns["myobject"] = {}; //object, 生成的tag是&#8221;<strong>ns.myobject</strong>&#8220;</li>
<li><strong>ns.myclass</strong>.prototype.myfunc = function(){}; //class</li>
<li><strong>ns.myclass </strong>= (function(){return {};}); //class</li>
<li>ns["myclass"] = (function(){return {};}); //class, 生成的tag是&#8221;<strong>ns.myclass</strong>&#8220;</li>
<li>var <strong>myfunc</strong> = function(){}; //function, 必须有var, _开头的忽略</li>
<li>function <strong>myfunc</strong>(){}; //function</li>
<li><strong>myfunc</strong>: function(){} //method</li>
<li>ns.<strong>myfunc</strong> = function(){}; //method</li>
<li>ns["myfunc"] = function(){}; //method, 生成的tag是&#8221;ns.<strong>myfunc</strong>&#8220;</li>
<li><strong>ns.myarray</strong> = []; //array</li>
<li><strong>myarray</strong>: [], //array</li>
<li>ns["myarray"] = []; //array, 生成的tag是&#8221;<strong>ns.myarray</strong>&#8220;</li>
</ol>
<p>使用方法是建一个~/.ctags文件，把上面那段代码放进去就行。为了在taglist窗口里显示类别（比如class和method），还需要在.vimrc里设置一个变量：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">let g:tlist_javascript_settings = 'javascript;f:function;c:class;o:object;m:method;s:string;a:array;n:constant'</li></ol></div>
<p><br/><br />
另一个要强烈推荐的插件是<a href="http://www.vim.org/scripts/script.php?script_id=1218" target="_blank">NERD Commenter</a>，从名字能看出跟上次推荐的NERD Tree是同一个强者写的，功能是针对各种文件类型快速的添加和删除注释，除了单行，多行，还提供“sexily”的注释……比如js里添加文档内容时常用的那种（如果首行写成/**，在aptana里会认作script doc格式）</p>
<p>不过这个插件默认使用了大量,c开头的快捷键……而,在vim里一般都用作自定义的<leader>键（<leader>的默认值是\，很显然小拇指没食指方便……），我没有找到相关的设置选项……所以直接<a href="http://code.google.com/p/yy-vimscript/source/diff?spec=svn7&#038;r=7&#038;format=side&#038;path=/trunk/plugin/NERD_commenter.vim" target="_blank">修改</a>了插件脚本……<br />
<br/><br />
唔唔就先写到这里罢，虽然vim无论日常使用还是hack都很爽，但是写起来还是挺枯燥的，头有点晕555……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limboy.com/2009/06/07/vim-setting-more/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>面向前端开发者和TextMate粉丝的vim配置</title>
		<link>http://www.limboy.com/2009/05/30/vim-setting/</link>
		<comments>http://www.limboy.com/2009/05/30/vim-setting/#comments</comments>
		<pubDate>Sat, 30 May 2009 14:21:23 +0000</pubDate>
		<dc:creator>Dexter.Yy</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[工具]]></category>

		<guid isPermaLink="false">http://www.limboy.com/2009/05/30/vim-setting/</guid>
		<description><![CDATA[vim是编辑器中的神器，但是因为学习曲线比较陡，界面也仿佛从石器时代穿越，广大fashion的前端工作者们难免对其有距离感。其实vim最大的萌点有两个，其一是百科全书般的文本编辑功能，其二是可以随意定制，满足任何与编辑器相关的需求和偏好，比如下面这张便是我在macbook pro上运行vim的截图，不仅语法高亮可以冒充TextMate，功能也几乎一致。

首先是做一个初始化配置脚本，在我的OSX10.5里是是~/.vimrc文件，这里只列出一些需要补充进去的设置：
&#34;设置语法高亮的配色，在GUI界面里使用我自定义的yytextmate.vim
if has(&#34;gui_running&#34;)
	colorscheme yytextmate
else
	colorscheme slate
endif
&#34;查找编码的规则（vim7默认都用utf-8，打开包含gbk字符的文件会出现乱码）
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
&#34;GUI界面里的字体，默认有抗锯齿
set guifont=Monaco:h12:cANSI
&#34;行间距，如果默认值太小，代码会非常纠结
set linespace=4&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;
&#34;用&#60;&#62;调整缩进时的长度
set shiftwidth=4 
&#34;制表符的长度，统一为4个空格的宽度
set tabstop=4
&#34;初始窗口的宽度
set columns=195
&#34;初始窗口的高度
set lines=45
&#34;初始窗口的位置
winpos 52 42
&#160;
&#34;显示行号
set number
&#34;行号栏的宽度
set numberwidth=4
&#160;&#34;禁止自动换行
set nowrap
&#34;在输入命令时列出匹配项目，也就是截图底部的效果
set wildmenu
&#34;显示光标位置
set ruler
&#34;分割窗口时保持相等的宽/高
set [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.limboy.com/2009/05/30/vim-setting/vim-editor-icon1png/' rel='attachment wp-att-235' title='vim-editor-icon1.png'><img src='http://www.limboy.com/wp-content/uploads/2009/05/vim-editor-icon1.png' alt='vim-editor-icon1.png' style="float:left;border:0;margin:0 0 0px 10px;" /></a><a href='http://www.limboy.com/wp-content/uploads/2009/05/textmate.png' title='textmate.png'><img src='http://www.limboy.com/wp-content/uploads/2009/05/textmate.png' alt='textmate.png' style="float:left;border:0;margin:0 10px 0px 0px;" /></a>vim是编辑器中的神器，但是因为学习曲线比较陡，界面也仿佛从石器时代穿越，广大fashion的前端工作者们难免对其有距离感。其实vim最大的萌点有两个，其一是百科全书般的文本编辑功能，其二是可以随意定制，满足任何与编辑器相关的需求和偏好，比如下面这张便是我在macbook pro上运行vim的截图，不仅语法高亮可以冒充<a href="http://macromates.com/" target="_blank">TextMate</a>，功能也几乎一致。<span id="more-230"></span></p>
<p><a href='http://www.limboy.com/wp-content/uploads/2009/05/picture-4.png' title='picture-4.png'><img src='http://www.limboy.com/wp-content/uploads/2009/05/picture-4.png' alt='picture-4.png' style="width:400px;" /></a></p>
<p>首先是做一个初始化配置脚本，在我的OSX10.5里是是~/.vimrc文件，这里只列出一些需要补充进去的设置：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">&quot;设置语法高亮的配色，在GUI界面里使用我自定义的yytextmate.vim</li>
<li>if has(&quot;gui_running&quot;)</li>
<li>	colorscheme yytextmate</li>
<li>else</li>
<li>	colorscheme slate</li>
<li>endif</li>
<li>&quot;查找编码的规则（vim7默认都用utf-8，打开包含gbk字符的文件会出现乱码）</li>
<li>set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936</li>
<li>&quot;GUI界面里的字体，默认有抗锯齿</li>
<li>set guifont=Monaco:h12:cANSI</li>
<li>&quot;行间距，如果默认值太小，代码会非常纠结</li>
<li>set linespace=4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</li>
<li>&quot;用&lt;&gt;调整缩进时的长度</li>
<li>set shiftwidth=4 </li>
<li>&quot;制表符的长度，统一为4个空格的宽度</li>
<li>set tabstop=4</li>
<li>&quot;初始窗口的宽度</li>
<li>set columns=195</li>
<li>&quot;初始窗口的高度</li>
<li>set lines=45</li>
<li>&quot;初始窗口的位置</li>
<li>winpos 52 42</li>
<li>&nbsp;</li>
<li>&quot;显示行号</li>
<li>set number</li>
<li>&quot;行号栏的宽度</li>
<li>set numberwidth=4</li>
<li>&nbsp;&quot;禁止自动换行</li>
<li>set nowrap</li>
<li>&quot;在输入命令时列出匹配项目，也就是截图底部的效果</li>
<li>set wildmenu</li>
<li>&quot;显示光标位置</li>
<li>set ruler</li>
<li>&quot;分割窗口时保持相等的宽/高</li>
<li>set equalalways</li>
<li>&nbsp;</li>
<li>&nbsp;&quot;匹配括号的规则，增加针对html的&lt;&gt;</li>
<li>set matchpairs=(:),{:},[:],&lt;:&gt;</li>
<li>&quot;让退格，空格，上下箭头遇到行首行尾时自动移到下一行（包括insert模式）</li>
<li>set whichwrap=b,s,&lt;,&gt;,[,]</li>
<li>&quot;取消自动备份</li>
<li>set nobackup</li>
<li>&quot;保存关闭文件之前保留一个备份</li>
<li>set writebackup</li>
<li>&nbsp;</li>
<li>&quot;js语法高亮脚本的设置</li>
<li>let g:javascript_enable_domhtmlcss=1</li>
<li>&nbsp;</li>
<li>&quot;设置自定义的&lt;leader&gt;快捷键</li>
<li>let mapleader=&quot;,&quot;</li>
<li>let g:mapleader=&quot;,&quot;</li>
<li>&nbsp;</li>
<li>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</li>
<li>&quot; bufExplorer插件的设置</li>
<li>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</li>
<li>let g:bufExplorerSortBy='mru'</li>
<li>let g:bufExplorerSplitRight=0&nbsp; &nbsp; &nbsp; </li>
<li>let g:bufExplorerSplitVertical=1&nbsp; &nbsp; .</li>
<li>let g:bufExplorerSplitVertSize = 30&nbsp; </li>
<li>let g:bufExplorerUseCurrentWindow=1&nbsp; </li>
<li>autocmd BufWinEnter \[Buf\ List\] setl nonumber</li>
<li>&nbsp;</li>
<li>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</li>
<li>&quot; winManager插件的设置</li>
<li>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</li>
<li>let g:winManagerWindowLayout = &quot;BufExplorer,FileExplorer|TagList&quot;</li>
<li>let g:winManagerWidth = 30</li>
<li>let g:defaultExplorer = 0</li>
<li>nmap &lt;silent&gt; &lt;leader&gt;wm :WMToggle&lt;cr&gt; </li>
<li>&nbsp;</li>
<li>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</li>
<li>&quot; netrw插件的快捷键</li>
<li>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</li>
<li>let g:netrw_winsize = 30</li>
<li>nmap &lt;silent&gt; &lt;leader&gt;fe :Sexplore!&lt;cr&gt;</li>
<li>&nbsp;</li>
<li>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</li>
<li>&quot; NERDTree插件的快捷键</li>
<li>&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;&quot;</li>
<li>nmap &lt;silent&gt; &lt;leader&gt;nt :NERDTree&lt;cr&gt;</li>
<li>&nbsp;</li>
<li>&nbsp;</li>
<li>&quot;把常用的ctrl快捷键映射到苹果键上（只保留cmd+c/cmd+v/cmd+z原有的功能）</li>
<li>map &lt;D-y&gt; &lt;C-y&gt;</li>
<li>map &lt;D-e&gt; &lt;C-e&gt;</li>
<li>map &lt;D-f&gt; &lt;C-f&gt;</li>
<li>map &lt;D-b&gt; &lt;C-b&gt;</li>
<li>map &lt;D-u&gt; &lt;C-u&gt;</li>
<li>map &lt;D-d&gt; &lt;C-d&gt;</li>
<li>map &lt;D-w&gt; &lt;C-w&gt;</li>
<li>map &lt;D-r&gt; &lt;C-r&gt;</li>
<li>map &lt;D-o&gt; &lt;C-o&gt;</li>
<li>map &lt;D-i&gt; &lt;C-i&gt;</li>
<li>map &lt;D-g&gt; &lt;C-g&gt;</li>
<li>map &lt;D-p&gt; &lt;C-p&gt;</li>
<li>map &lt;D-n&gt; &lt;C-n&gt;</li>
<li>map &lt;D-a&gt; &lt;C-a&gt;</li>
<li>cmap &lt;D-d&gt; &lt;C-d&gt;</li></ol></div>
<p>2009.6.7更新：最新的<a href="http://code.google.com/p/yy-vimscript/source/browse/trunk/vimrc" target="_blank">vimrc</a>和其他脚本已经上传到google code的项目仓库里了<br />
<br/><br />
=================步骤二的分割线===================<br />
<br/><br />
然后在个人配置目录里添加语法高亮脚本（~/.vim/syntax/），其中html和css可以直接把vim7自带的脚本复制出来（$VIMRUNTIME/syntax/），js的脚本则推荐用这个：</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=1491" target="_blank">JavaScript syntax : Better JavaScrirpt syntax support<br />
</a></p>
<p>包含更多的关键字以及自动折叠代码的功能，也能在html文件内支持js语法高亮，需要注意的是如果要支持dom方法的关键字，需要在.vimrc里设置一个全局变量javascript_enable_domhtmlcss</p>
<p>我还用了这里的<a href="htmhttp://www.fleiner.com/vim/download.html" target="_blank">html.vim</a>。<br />
<br/><br />
=================步骤三的分割线===================<br />
<br/><br />
接下来就可以对照着syntax脚本，给每个语法组设置颜色，配色脚本需要放到~/.vim/colors/里，然后在.vimrc里用colorscheme命令选定。colors脚本只需要一个，因为syntax脚本末尾都会把自定义的语法组链接到标准语法组，比如：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">HiLink javaScriptDocComment&nbsp; Comment</li></ol></div>
<p>所以只需要定义一套针对标准语法组的配色方案，再通过修改syntax脚本里来调整相应语言的配色。我尝试过针对不同文件类型使用不同的配色方案，发现相当麻烦，需要在切换/打开/关闭缓冲区和窗口的时候都用colorscheme重置配色：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">autocmd BufNewFile,BufRead,BufEnter,WinEnter,FileType *.html,*.htm colorscheme delek</li></ol></div>
<p>而且colorscheme会影响整个窗口（一个vim进程实例），如果在窗口内同时分割显示了几个文件，即使文件类型不同，也会同时改变颜色……</p>
<p>我平时最喜欢TextMate的Blackboard主题（大概是因为里面有橙色罢XD），在Aptana上也仿制过（配置文件：<a href="http://www.limboy.com/conf/eclipse/yytextmate.col" target="_blank">yytextmate.col</a>），这次是直接在vim的slate主题基础上修改出来的，比vim.org上面那个<a href="http://www.vim.org/scripts/script.php?script_id=2280" target="_blank">blackboard.vim</a>要更完善～</p>
<p>我的colors脚本：<a href="http://code.google.com/p/yy-vimscript/source/browse/trunk/colors/yytextmate.vim" target="_blank">yytextmate.vim</a><br />
我调整过的syntax脚本：<a href="http://code.google.com/p/yy-vimscript/source/browse/trunk/syntax/javascript.vim" target="_blank">javascript.vim</a>, <a href="http://code.google.com/p/yy-vimscript/source/browse/trunk/syntax/html.vim" target="_blank">html.vim</a><br />
<br/><br />
=================步骤四的分割线===================<br />
<br/><br />
按照由外向内的顺序，现在该折腾功能了，首先是缩进插件，vim也自带有智能缩进功能，需要开启autoindent和smartindent参数，但是在编辑js代码的时候效果很不好，对于python这种靠缩进活命的语言就更不能忍了，因此至少需要装以下三个插件：</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=1839"  target="_blank">IndentAnything : Write indentations or enhance existing indentations without writing code</a><br />
<a href="http://www.vim.org/scripts/script.php?script_id=1840"  target="_blank">Javascript Indentation : Indentation for Javascript </a><br />
<a href="http://www.vim.org/scripts/script.php?script_id=974"  target="_blank">indent/python.vim : An alternative indentation script for python<br />
</a></p>
<p>第一个放到~/.vim/plugin/里，后两个放在~/.vim/indent/里<br />
<br/><br />
=================步骤五的分割线===================<br />
<br/><br />
<a href='http://www.limboy.com/wp-content/uploads/2009/05/textmate.png' title='textmate.png'><img src='http://www.limboy.com/wp-content/uploads/2009/05/textmate.png' alt='textmate.png' style="float:left;border:0;margin:0 10px 10px 0;" /></a>接下来终于要来实现TextMate最重要的功能了，TextMate之所以被称作地上最贵麦上最强的编辑器，就是因为支持大量可以通过tab或其他快捷键发动的强力Bundles，这些Bundles可以分为两种类型，一种是针对编辑器的内容执行指令（称作command），比如直接执行shell脚本，压缩js代码，对html转义，格式化JSON，编译swf等等，而指令界面是vim的核心，不但可以直接执行shell命令，也可以通过设置键位映射和宏，把复杂的操作绑定成简单的快捷键，因此这类功能原本就是vim的强项。</p>
<p>另一种类型的Bundles主要用来帮助程序员快速开发，通过简短的缩写＋tab键直接生成所需的代码模板（称作snippet），然后依然用tab在模板中需要改动的位置之间跳转，整个过程不需要鼠标定位，非常高效，是一种比大型IDE里常见的&#8221;code hinting&#8221;更实用的智能补全功能。</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=2540"  target="_blank">snipMate : TextMate-style snippets for Vim</a></p>
<p>上面这个非常“新”的插件让vim也具备了同样的功能，而且几乎是跟TextMate完全兼容的移植，比如这是从TextMate里取出的snippet源码：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Gray;">$</span><span style="color: Olive;">{</span><span style="color: Maroon;">1</span><span style="color: Gray;">:</span><span style="color: Blue;">class_name</span><span style="color: Olive;">}</span><span style="color: Gray;">.</span><span style="color: Blue;">prototype</span><span style="color: Gray;">.$</span><span style="color: Olive;">{</span><span style="color: Maroon;">2</span><span style="color: Gray;">:</span><span style="color: Blue;">method_name</span><span style="color: Olive;">}</span><span style="color: Gray;"> = </span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Gray;">$</span><span style="color: Olive;">{</span><span style="color: Maroon;">3</span><span style="color: Gray;">:</span><span style="color: Blue;">first_argument</span><span style="color: Olive;">})</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; $</span><span style="color: Olive;">{</span><span style="color: Maroon;">0</span><span style="color: Gray;">:</span><span style="color: #ffa500;">// body...}</span></li>
<li><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li></ol></div>
<p>${}标签是代码插入后可以通过tab跳转的“可编辑”位置，其中的序号表示跳转顺序，冒号后的字符是默认内容。这段代码只要在前面加上snippet proto就可以直接放进~/.vim/snippets/javascript.snippets里，通过proto<tab>触发</p>
<p>把常见的程序结构抽象成snippet可以节省很多重复输入，比如这是我定义的一个module模式：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: Blue;">snippet</span><span style="color: Gray;"> </span><span style="color: Blue;">module</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: #ffa500;">/**</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * ${5:Describe what this module does}</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; * @param {object} ${6:paramName}</span></li>
<li><span style="color: #ffa500;">&nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;"> $</span><span style="color: Olive;">{</span><span style="color: Maroon;">1</span><span style="color: Gray;">:</span><span style="color: Blue;">classname</span><span style="color: Olive;">}</span><span style="color: Gray;"> = </span><span style="color: Olive;">(</span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;"> $</span><span style="color: Maroon;">1</span><span style="color: Blue;">Object</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Olive;">{</span><span style="color: Maroon;">2</span><span style="color: Gray;">:</span><span style="color: Blue;">privateMethod1</span><span style="color: Olive;">}</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Olive;">{</span><span style="color: Maroon;">3</span><span style="color: Gray;">:</span><span style="color: Blue;">privateMethod2</span><span style="color: Olive;">}</span><span style="color: Gray;">: </span><span style="color: Green;">function</span><span style="color: Olive;">(){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Green;">function</span><span style="color: Olive;">(</span><span style="color: Blue;">opt</span><span style="color: Olive;">){</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">var</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">publicObj</span><span style="color: Gray;"> = </span><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">options</span><span style="color: Gray;">: </span><span style="color: Olive;">{}</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Maroon;">2</span><span style="color: Gray;">: $</span><span style="color: Maroon;">1</span><span style="color: Blue;">Object</span><span style="color: Gray;">.$</span><span style="color: Maroon;">2</span><span style="color: Gray;">,</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $</span><span style="color: Maroon;">3</span><span style="color: Gray;">: $</span><span style="color: Maroon;">1</span><span style="color: Blue;">Object</span><span style="color: Gray;">.$</span><span style="color: Maroon;">3</span><span style="color: Gray;">$</span><span style="color: Olive;">{</span><span style="color: Maroon;">4</span><span style="color: Gray;">:,</span><span style="color: Olive;">}</span><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.</span><span style="color: Blue;">extend</span><span style="color: Olive;">(</span><span style="color: Blue;">publicObj</span><span style="color: Gray;">.</span><span style="color: Blue;">options</span><span style="color: Gray;">, </span><span style="color: Blue;">opt</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Green;">return</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">publicObj</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Olive;">}</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; </span><span style="color: Olive;">})()</span><span style="color: Gray;">;</span></li></ol></div>
<p>修改过程中会看到$1,$2,$3自动更新成你键入的名字。</p>
<p>我修改过的完整javascript.snippets：<a href="http://code.google.com/p/yy-vimscript/source/browse/trunk/snippets/javascript.snippets" target="_blank">http://code.google.com/p/yy-vimscript/source/browse/trunk/snippets/javascript.snippets</a></p>
<p>实际上还有一个比较老牌的插件也致力于实现同样的snippet功能：</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=1318" target="_blank">snippetsEmu : An attempt to emulate TextMate&#8217;s snippet expansion</a></p>
<p>但是它支持的模板语法比TextMate差很多，跟上面相同的prototype模板要通过这种形式定义：</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline">let st = g:snip_start_tag</li>
<li>let et = g:snip_end_tag</li>
<li>let cd = g:snip_elem_delim</li>
<li>&nbsp;</li>
<li>exec &quot;Snippet proto &quot;.st.&quot;className&quot;.et.&quot;.prototype.&quot;.st.&quot;methodName&quot;.et.&quot; = function(&quot;.st.et.&quot;)&lt;CR&gt;{&lt;CR&gt;&quot;.st.et.&quot;&lt;CR&gt;};&lt;CR&gt;&quot;.st.et</li></ol></div>
<p>缩进容易出错，不支持用序号设定跳转顺序，安装过程也比snipMate繁复，所以被我毫不留恋的淘汰了……</p>
<p>为了实现更广泛的智能补全，还需要一个必装插件：</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=1643" target="_blank">SuperTab continued. : Do all your insert-mode completion with Tab. </a></p>
<p>SuperTab让任意字符都可以通过tab补全，比较取巧的是，它会在缓冲区的上下文中寻找匹配的词来补全，因此不需要附带很庞大的API数据。<br />
<br/><br />
=================步骤六的分割线===================<br />
<br/><br />
下一步需要增强的是文件/项目管理，vim虽然自带一个FileExplorer（直接编辑一个目录时会调用它，比如:e .），还有上面提到过的wildmenu的强力辅助，但是与常见的GUI编辑器和IDE相比，仍然不太直观，因此以下插件值得一装：</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=1658" target="_blank">The NERD tree : A tree explorer plugin for navigating the filesystem</a><br />
我最喜欢的文件导航工具，设置了快捷键,nt直接在侧面打开</p>
<p><a href="http://vim.sourceforge.net/scripts/script.php?script_id=42" target="_blank">bufexplorer : Buffer Explorer / Browser </a><br />
缓冲区导航</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=95" target="_blank">winmanager : A windows style IDE for Vim 6.0</a><br />
把bufexploer和FileExplorer集成在左侧，类似IDE的效果，这个功能不足以让我放弃NERDTree……而且这个插件似乎很久没更新了，连支持Vim7的版本都没有，但是很多人喜欢，所以也推荐一下…… </p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=2607" target="_blank">TaskList.vim : Eclipse like task list</a><br />
实现Eclipse的任务列表</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=69" target="_blank">project.tar.gz : Organize/Navigate projects of files</a><br />
项目导航工具，不过没有Eclipse好用，需要写配置脚本，跟TextMate那种拖来拖去的drawer就更不能比了……<br />
<br/><br />
=================步骤七的分割线===================<br />
<br/><br />
最后推荐的插件都是开发工具：</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=90" target="_blank">vcscommand.vim : CVS/SVN/SVK/git integration plugin</a><br />
SVN/git管理工具，这个是必备罢。没有GUI菜单，不过快捷键也很方便，而且VimDiff是很棒的比较工具</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=2578" target="_blank">javaScriptLint.vim : Displays JavaScript Lint warnings in the quickfix error window</a><br />
看仔细啦～这个不是道格拉斯老爷子的JSLint，那个东西虽然强大（以前没觉得，最近在《代码之美》里看到道格拉斯老爷子描述了“递归下降分析”＋“运算符优先级技术”的动态语言解释器，才知道原来JSLint和JSON parser只是老爷子晒技术的承载体……），但是由于把规范约束在一个JS的安全子集上，适用面不广，设置起来也麻烦，在实际开发工作中未必实用。而<a href="http://javascriptlint.com/" target="_blank">这个Lint</a>就很中规中矩，当然也没自己折腾解释器啦，直接用了Mozilla的js引擎，安装也很方便，提供一个conf文件可以设置警告条件。这个vim插件装上后，保存js文件时都会自动校验代码并显示一个提示信息窗口。</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=39" target="_blank">matchit : extended % matching for HTML, LaTeX, and many other languages</a><br />
vim里的%命令可以在嵌套字符之间跳转（比如括号和引号，我在上面的.vimrc文件里增加了html的<>），这个插件将它的功能扩展到嵌套标签和语句</p>
<p>To be <a href="http://www.limboy.com/2009/06/07/vim-setting-more/" target="_blank">continue</a>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limboy.com/2009/05/30/vim-setting/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>用synergy在Mac和双屏幕PC之间共享鼠标键盘</title>
		<link>http://www.limboy.com/2008/11/25/synergy-on-mac-and-pc/</link>
		<comments>http://www.limboy.com/2008/11/25/synergy-on-mac-and-pc/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 16:13:20 +0000</pubDate>
		<dc:creator>Dexter.Yy</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[纯水]]></category>

		<guid isPermaLink="false">http://www.limboy.com/2008/11/25/synergy-on-mac-and-pc/</guid>
		<description><![CDATA[其实去年5月的时候我就在ibook和公司的PC上装过synergy，后来完全抛弃了windows环境，那台PC长期闲置，有没有键盘鼠标都无所谓，所以就没再装过这个工具。未想到风水轮流转——
先是在封闭开发黑豆的时候，我只把macbook pro和宽屏显示器带进了小黑屋，完全不用PC测试，自以为凭借经验和美学智慧已经足以预判和规避一切浏览器兼容问题……结果测试阶段被ie里relative定位的一系列渲染问题折腾得很囧。
然后是testing team抛弃了Bugzilla，开始“严肃的”使用Mercury QC，虽然它繁复的操作和用activex开发的客户端都让我很不屑，但是这玩意的可怕之处在于严谨的（或者说死板的）权限和缺陷状态管理，没有哪个testing team的姐姐能帮我绕过流程，由于我长期不接受也不关闭任何bug，每周五邮件里的统计结果就很不好看。
再加上最近又开始大萧条，为了遵从开源节流现金为王的教诲，我也只好腆着脸登陆公司里那个界面更烂的OA系统申请报销手机费。
这些事情都让我越来越离不开IE，对了，windows上的软件也越来越有吸引力，比如httpwatch和chrome，相反mac上有吸引力的软件却恰好不能在我的工作环境中使用，比如textmate和coda，eclipse 3.4也经常假死或者弹一些莫名其妙的报错窗口。
还有一个重要的因素是，mac里的flashplayer绝对是资源大户，虽然有flashblock这类插件帮忙，但是由于我经常要反复刷新各种带有flash广告和播放器的页面，cpu还是会被折腾到接近80度，你可能会说这没什么大不了的，但是我坚持认为：windows里的浏览器更适合进行这些测试！公司采购的机器更适合承担这些耗损！
鉴于以上总总，我终于忍无可忍去申请换了配置更高的PC，装上了windows2008，决心给自己的工作环境增加一些效率和新鲜感。
不好意思其实本文只是想简单的分享synergy的设置方法，现在回到正题。
synergy是一个可以让多台机器共用一套鼠标和键盘的工具，除了能在指针跨越屏幕的时候切换操作对象，它还能在多台机器之间共享剪贴板内容，关联键位，总之作为一个软件实现来说是很好很强大的。而且这个软件虽然挂了GPL的牌子，但是好像从06年到现在都没更新过，可见功能很健全，bug很少。
在mac里以前只能用命令行和配置文件来使用synergy，GUI好像也有很多，比如quicksynergy，但是问题很多。感谢Patrick同学在youtube上发布的视频教程，我这次尝试了synergyKM，很轻松的就设置成功了。
下载后直接执行镜像里的SynergyKM.prefpane，会添加到系统设置面板里。跟windows的设置界面类似，如果想使用其他电脑的键盘鼠标，直接设置为client，填入那台电脑的ip地址，然后运行，如果那台机器上已经在运行synergy的server，就会提示connected，一切ok。
如果想把这台机器的鼠标键盘共享给其他机器用，可以设置为server，然后在后续的configuration里添加机器，screen name就是电脑的主机名，在windows的设置界面里直接点左下角的info就可以查到，在mac里可以在这个设置面板的“共享”里查到，比如我的：

注意是“.local”前面那个名字
包括server本身也要添加进去，然后就可以运行起来等待其他客户端来连接了。SynergyKM界面里的图标位置表示鼠标在屏幕之间移动的方式，比如我的台式机（PC）是接双显示器，笔记本放在它们中间：

而鼠标指针只能通过进出一个方向的屏幕边缘在两台机器之间切换，所以我设置的是从笔记本屏幕顶部移出进入台式机的显示器（而且如果从顶部偏左的位置移出，就会进入左边的显示器，很赞）

当然也不能忘了把mac里的command键（苹果键）关联到windows的ctrl键……
windows机器做server的设置：

完整的设置过程可以看Patrick的视频：

]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.limboy.com/2008/11/25/synergy-on-mac-and-pc/picture-3png/' rel='attachment wp-att-205' title='picture-3.png'><img src='http://www.limboy.com/wp-content/uploads/2008/11/picture-3.png' alt='picture-3.png' style="width:200px;float:left;margin:0 5px 5px 0;" /></a>其实去年5月的时候我就在ibook和公司的PC上装过synergy，后来完全抛弃了windows环境，那台PC长期闲置，有没有键盘鼠标都无所谓，所以就没再装过这个工具。未想到风水轮流转——</p>
<p>先是在封闭开发黑豆的时候，我只把macbook pro和宽屏显示器带进了小黑屋，完全不用PC测试，自以为凭借经验和美学智慧已经足以预判和规避一切浏览器兼容问题……结果测试阶段被ie里relative定位的一系列渲染问题折腾得很囧。</p>
<p>然后是testing team抛弃了Bugzilla，开始“严肃的”使用Mercury QC，虽然它繁复的操作和用activex开发的客户端都让我很不屑，但是这玩意的可怕之处在于严谨的（或者说死板的）权限和缺陷状态管理，没有哪个testing team的姐姐能帮我绕过流程，由于我长期不接受也不关闭任何bug，每周五邮件里的统计结果就很不好看。</p>
<p>再加上最近又开始大萧条，为了遵从开源节流现金为王的教诲，我也只好腆着脸登陆公司里那个界面更烂的OA系统申请报销手机费。</p>
<p>这些事情都让我越来越离不开IE，对了，windows上的软件也越来越有吸引力，比如httpwatch和chrome，相反mac上有吸引力的软件却恰好不能在我的工作环境中使用，比如textmate和coda，eclipse 3.4也经常假死或者弹一些莫名其妙的报错窗口。<span id="more-201"></span></p>
<p>还有一个重要的因素是，mac里的flashplayer绝对是资源大户，虽然有flashblock这类插件帮忙，但是由于我经常要反复刷新各种带有flash广告和播放器的页面，cpu还是会被折腾到接近80度，你可能会说这没什么大不了的，但是我坚持认为：windows里的浏览器更适合进行这些测试！公司采购的机器更适合承担这些耗损！</p>
<p>鉴于以上总总，我终于忍无可忍去申请换了配置更高的PC，装上了windows2008，决心给自己的工作环境增加一些效率和新鲜感。</p>
<p>不好意思其实本文只是想简单的分享synergy的设置方法，现在回到正题。</p>
<p><a target="_blank" href="http://synergy2.sourceforge.net/">synergy</a>是一个可以让多台机器共用一套鼠标和键盘的工具，除了能在指针跨越屏幕的时候切换操作对象，它还能在多台机器之间共享剪贴板内容，关联键位，总之作为一个软件实现来说是很好很强大的。而且这个软件虽然挂了GPL的牌子，但是好像从06年到现在都没更新过，可见功能很健全，bug很少。</p>
<p>在mac里以前只能用命令行和<a target="_blank" href="http://synergy2.sourceforge.net/configuration.html">配置文件</a>来使用synergy，GUI好像也有很多，比如<a target="_blank" href="http://quicksynergy.sourceforge.net/">quicksynergy</a>，但是问题很多。感谢Patrick同学在youtube上发布的视频教程，我这次尝试了<a target="_blank" href="http://sourceforge.net/projects/synergykm">synergyKM</a>，很轻松的就设置成功了。</p>
<p>下载后直接执行镜像里的SynergyKM.prefpane，会添加到系统设置面板里。跟windows的设置界面类似，如果想使用其他电脑的键盘鼠标，直接设置为client，填入那台电脑的ip地址，然后运行，如果那台机器上已经在运行synergy的server，就会提示connected，一切ok。</p>
<p>如果想把这台机器的鼠标键盘共享给其他机器用，可以设置为server，然后在后续的configuration里添加机器，screen name就是电脑的主机名，在windows的设置界面里直接点左下角的info就可以查到，在mac里可以在这个设置面板的“共享”里查到，比如我的：</p>
<p><a target="_blank" href='http://www.limboy.com/wp-content/uploads/2008/11/picture-1.png' title='picture-1.png'><img src='http://www.limboy.com/wp-content/uploads/2008/11/picture-1.png' alt='picture-1.png' style="width:400px;" /></a></p>
<p>注意是“.local”前面那个名字</p>
<p>包括server本身也要添加进去，然后就可以运行起来等待其他客户端来连接了。SynergyKM界面里的图标位置表示鼠标在屏幕之间移动的方式，比如我的台式机（PC）是接双显示器，笔记本放在它们中间：</p>
<p><a target="_blank" href="http://www.flickr.com/photos/dexter-yy/3055649385/" title="用synergy在PC的双屏幕和macbook之间共享鼠标键盘 by dexteryy, on Flickr"><img src="http://farm4.static.flickr.com/3208/3055649385_1952b4b8c1_b.jpg" alt="用synergy在PC的双屏幕和macbook之间共享鼠标键盘" style="width:400px;" /></a></p>
<p>而鼠标指针只能通过进出一个方向的屏幕边缘在两台机器之间切换，所以我设置的是从笔记本屏幕顶部移出进入台式机的显示器（而且如果从顶部偏左的位置移出，就会进入左边的显示器，很赞）</p>
<p><a target="_blank" href='http://www.limboy.com/wp-content/uploads/2008/11/picture-2.png' title='picture-2.png'><img src='http://www.limboy.com/wp-content/uploads/2008/11/picture-2.png' alt='picture-2.png' style="width:400px;" /></a></p>
<p>当然也不能忘了把mac里的command键（苹果键）关联到windows的ctrl键……</p>
<p>windows机器做server的设置：</p>
<p><a href='http://www.limboy.com/wp-content/uploads/2008/11/synergy.png' title='synergy.png'><img src='http://www.limboy.com/wp-content/uploads/2008/11/synergy.png' alt='synergy.png' style="width:400px;" /></a></p>
<p>完整的设置过程可以看Patrick的视频：</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/uydwhv20qnI&#038;hl=en&#038;fs=1"></param><param name="wmode" value="opaque"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/uydwhv20qnI&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" wmode="opaque" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.limboy.com/2008/11/25/synergy-on-mac-and-pc/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

