<?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>Rainux's Journal &#187; Vim Archives  &laquo; Rainux&#039;s Journal</title>
	<atom:link href="http://rainux.org/tag/vim/feed/" rel="self" type="application/rss+xml" />
	<link>http://rainux.org</link>
	<description>Rubyist of Vimmer</description>
	<lastBuildDate>Sat, 23 Jul 2011 12:09:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>使用 SVN 来管理 Vim 配置文件 .vimrc 及插件集</title>
		<link>http://rainux.org/%e4%bd%bf%e7%94%a8-svn-%e6%9d%a5%e7%ae%a1%e7%90%86-vim-%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6-vimrc-%e5%8f%8a%e6%8f%92%e4%bb%b6%e9%9b%86</link>
		<comments>http://rainux.org/%e4%bd%bf%e7%94%a8-svn-%e6%9d%a5%e7%ae%a1%e7%90%86-vim-%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6-vimrc-%e5%8f%8a%e6%8f%92%e4%bb%b6%e9%9b%86#comments</comments>
		<pubDate>Mon, 05 Nov 2007 14:42:27 +0000</pubDate>
		<dc:creator>Rainux</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Software 软件]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Software_软件]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://www.rainux.org/2007/11/05/187</guid>
		<description><![CDATA[注: 本文第一次写作时没有进行全面的测试，由于 svn update 操作更新文件时会破坏 NTFS 上的硬链接而导致第一次的方法无法正常使用。现在你看到的已经是新的方法。在此为我的疏忽向大家道歉。 现在我的生活早已离不开 Vim 了，无论是在公司还是在家里，无论是在本地计算机还是远程服务器上，Vim 必定是我使用得最多的程序之一。当然了，Vim 虽好，也一定要有符合自己习惯的 .vimrc 和插件集才能发挥出更大的潜能，让我们用得更爽。也就是说，.vimrc 肯定是会被经常修改的，插件集也应该会时常添加新成员或进行版本更新。显然，要在家里和公司以及一些远程服务器之间频繁地同步这些修改是件很烦人的事。幸好，我们有 Subversion 可以让这一切变得简单。 让我们从公司的 Linux 桌面机上开始。 # 将 $HOME 里的 .vimrc 和 .vim 目录放到 vimfiles 目录里以便进行 SVN 导入操作 cd ~ mkdir vimfiles mv .vimrc vimfiles mv .vim vimfiles svn import vimfiles http://svn.rainux.org/vimfiles/trunk # 从 SVN 里 checkout 出一份 working copy 到 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>注: 本文第一次写作时没有进行全面的测试，由于 svn update 操作更新文件时会破坏 NTFS 上的硬链接而导致第一次的方法无法正常使用。现在你看到的已经是新的方法。在此为我的疏忽向大家道歉。</strong></p>

<p>现在我的生活早已离不开 Vim 了，无论是在公司还是在家里，无论是在本地计算机还是远程服务器上，Vim 必定是我使用得最多的程序之一。当然了，Vim 虽好，也一定要有符合自己习惯的 .vimrc 和插件集才能发挥出更大的潜能，让我们用得更爽。也就是说，.vimrc 肯定是会被经常修改的，插件集也应该会时常添加新成员或进行版本更新。显然，要在家里和公司以及一些远程服务器之间频繁地同步这些修改是件很烦人的事。幸好，我们有 Subversion 可以让这一切变得简单。</p>

<p>让我们从公司的 Linux 桌面机上开始。</p>

<pre name="code" class="bash"># 将 $HOME 里的 .vimrc 和 .vim 目录放到 vimfiles 目录里以便进行 SVN 导入操作
cd ~
mkdir vimfiles
mv .vimrc vimfiles
mv .vim vimfiles
svn import vimfiles http://svn.rainux.org/vimfiles/trunk
# 从 SVN 里 checkout 出一份 working copy 到 $HOME 里，
# 并且设置忽略掉 $HOME 里其他所有文件
svn co http://svn.rainux.org/vimfiles/trunk .
svn ps svn:ignore '*' .
svn ci -m "Let's ignore all files those not managed by Subversion in $HOME."
# 用来进行导入操作的 vimfiles 目录已经不再有任何存在的意义了
rm -rf vimfiles
</pre>

<p>好了，我们的 .vimrc 和插件集已经版本化了，下班回家。</p>

<pre name="code" class="cmd"># 先备份一下家里 Windows 上的文件，这假设我们没有使用 Cygwin
CD %HOME%
MOVE .vimrc .vimrc.backup
MOVE vimfiles vimfiles.backup
svn co http://svn.rainux.org/vimfiles/trunk .
</pre>

<p>现在我们遇到问题了，Vim 在 Windows 上会尝试从 %HOME%\vimfiles 目录加载用户脚本，而不会理会 %HOME%&#92;.vim 目录。我的解决办法是为 .vim 目录建立符号链接 vimfiles，这需要 %HOME% 所在分区必须是 NTFS 文件系统。新的问题是 Windows 本身并没有附带创建符号链接的工具，需要用 Sysinternals 提供的命令行工具 <a href="http://www.microsoft.com/technet/sysinternals/FileAndDisk/Junction.mspx">junction.exe</a> 或者 Windows 2000 Resource Kit 里的 linkd.exe 来创建。</p>

<pre name="code" class="cmd">CD %HOME%
junction vimfiles .vim
</pre>

<p>OK，开始享受 Subversion 为我们带来的便利吧！不仅仅可以方便的同步在公司和在家里对 .vimrc 及插件集的修改，在远程服务器上要取得这些最新的修改也变得非常容易。什么，某个服务器上还在使用古老的 Vim 6.3 ？没有关系，为 http://svn.rainux.org/vimfiles 创建一个名为 6.x 的 branch，删掉无法用于 6.x 的插件即可。</p>

<p>最后，如果你对我的 Vim 配置感兴趣，可以从上面提到的 URL 里 checkout 一份出来看看，是的，它是真实的 URL。:)</p>

<p>Update: <ins datetime="2009-02-21T02:10:49+00:00">作为狂热的 Git 爱好者，我已经使用 Git 来管理我的 Vim 配置文件了，请访问<a href="/my-vimrc">我的 Vim 配置文件</a>页面。</ins></p>

	标签：<a href="http://rainux.org/tag/gnu-linux/" title="GNU/Linux" rel="tag">GNU/Linux</a>, <a href="http://rainux.org/tag/software_%e8%bd%af%e4%bb%b6/" title="Software_软件" rel="tag">Software_软件</a>, <a href="http://rainux.org/tag/subversion/" title="Subversion" rel="tag">Subversion</a>, <a href="http://rainux.org/tag/vim/" title="Vim" rel="tag">Vim</a>, <a href="http://rainux.org/tag/windows/" title="Windows" rel="tag">Windows</a><br />
]]></content:encoded>
			<wfw:commentRss>http://rainux.org/%e4%bd%bf%e7%94%a8-svn-%e6%9d%a5%e7%ae%a1%e7%90%86-vim-%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6-vimrc-%e5%8f%8a%e6%8f%92%e4%bb%b6%e9%9b%86/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vim? Emacs!</title>
		<link>http://rainux.org/vim-emacs</link>
		<comments>http://rainux.org/vim-emacs#comments</comments>
		<pubDate>Fri, 02 Nov 2007 16:38:38 +0000</pubDate>
		<dc:creator>Rainux</dc:creator>
				<category><![CDATA[Funny 搞笑]]></category>
		<category><![CDATA[Personal 个人]]></category>
		<category><![CDATA[Software 软件]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Funny_搞笑]]></category>
		<category><![CDATA[Personal_个人]]></category>
		<category><![CDATA[Software_软件]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://www.rainux.org/2007/11/03/186</guid>
		<description><![CDATA[我: Hmmm，你的 Emacs 编辑 Rails 项目明显没有偶的 Vim 爽嘛，连 RHTML 里的 Ruby 代码都没法语法高亮。 W 君: （看了偶演示 Vim + rails.vim 后）确实不太方便。 我: 那何不转过来用 Vim？反正 Vim 你也经常用（W 是 Linux 系统管理员）。 W 君: 不行，我用 Emacs 是有很特殊的原因地。 我: ？ W 君: …… 我: ……？ W 君: …… 因为 Emacs 的图标是牛啊。（同事 W 君是股民 -_-b） 我: …… 狂晕！ 标签：Emacs, Funny_搞笑, Personal_个人, Software_软件, [...]]]></description>
			<content:encoded><![CDATA[<p>我: Hmmm，你的 Emacs 编辑 Rails 项目明显没有偶的 Vim 爽嘛，连 RHTML 里的 Ruby 代码都没法语法高亮。</p>

<p>W 君: （看了偶演示 Vim + <a href="http://rails.vim.tpope.net">rails.vim</a> 后）确实不太方便。</p>

<p>我: 那何不转过来用 Vim？反正 Vim 你也经常用（W 是 Linux 系统管理员）。</p>

<p>W 君: 不行，我用 Emacs 是有很特殊的原因地。</p>

<p>我: ？</p>

<p>W 君: ……</p>

<p>我: ……？</p>

<p>W 君: …… 因为 Emacs 的图标是牛啊。（同事 W 君是股民 -_-b）</p>

<p>我: …… 狂晕！</p>

	标签：<a href="http://rainux.org/tag/emacs/" title="Emacs" rel="tag">Emacs</a>, <a href="http://rainux.org/tag/funny_%e6%90%9e%e7%ac%91/" title="Funny_搞笑" rel="tag">Funny_搞笑</a>, <a href="http://rainux.org/tag/personal_%e4%b8%aa%e4%ba%ba/" title="Personal_个人" rel="tag">Personal_个人</a>, <a href="http://rainux.org/tag/software_%e8%bd%af%e4%bb%b6/" title="Software_软件" rel="tag">Software_软件</a>, <a href="http://rainux.org/tag/vim/" title="Vim" rel="tag">Vim</a><br />
]]></content:encoded>
			<wfw:commentRss>http://rainux.org/vim-emacs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>解决 gvimext 在 UTF-8 locale 下乱码的问题</title>
		<link>http://rainux.org/%e8%a7%a3%e5%86%b3-gvimext-%e5%9c%a8-utf-8-locale-%e4%b8%8b%e4%b9%b1%e7%a0%81%e7%9a%84%e9%97%ae%e9%a2%98</link>
		<comments>http://rainux.org/%e8%a7%a3%e5%86%b3-gvimext-%e5%9c%a8-utf-8-locale-%e4%b8%8b%e4%b9%b1%e7%a0%81%e7%9a%84%e9%97%ae%e9%a2%98#comments</comments>
		<pubDate>Tue, 19 Jun 2007 20:43:24 +0000</pubDate>
		<dc:creator>Rainux</dc:creator>
				<category><![CDATA[Software 软件]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[gVim]]></category>
		<category><![CDATA[Software_软件]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://www.rainux.org/2007/06/20/155</guid>
		<description><![CDATA[gvimext.dll 是一个为 Windows 里任意文件的右键菜单 (context menu) 添加“用 Vim 编辑”菜单项的 shell 扩展，随 gVim 一起安装。 但是无论是官方的安装版本，还是我自己编译的版本，在使用 UTF-8 locale 时 (比如设置环境变量 LANG 为 zh_CN.UTF-8) 这个右键菜单项都会显示乱码。其实原因很简单，Windows 并不原生支持 UTF-8 编码，所以直接使用 TextOut() 之类的 API 输出 UTF-8 编码的消息文本肯定会显示乱码。 曾经尝试修改 gvimext.cpp，在里面覆盖环境变量 LANG 的值，去掉末尾的 .UTF-8，但这样做的结果是导致 gvimext.dll 寄生进程 explorer.exe 或 TotalCmd.exe (如果是在 Total Commander 中使用右键菜单的话) 的 LANG 也被修改，造成由 explorer 启动的 gVim 的 LANG 也成了被去掉 .UTF-8 [...]]]></description>
			<content:encoded><![CDATA[<p>gvimext.dll 是一个为 Windows 里任意文件的右键菜单 (context menu) 添加“用 Vim 编辑”菜单项的 shell 扩展，随 gVim 一起安装。</p>

<p>但是无论是官方的安装版本，还是我自己编译的版本，在使用 UTF-8 locale 时 (比如设置环境变量 LANG 为 zh_CN.UTF-8) 这个右键菜单项都会显示乱码。其实原因很简单，Windows 并不原生支持 UTF-8 编码，所以直接使用 TextOut() 之类的 API 输出 UTF-8 编码的消息文本肯定会显示乱码。</p>

<p>曾经尝试修改 gvimext.cpp，在里面覆盖环境变量 LANG 的值，去掉末尾的 .UTF-8，但这样做的结果是导致 gvimext.dll 寄生进程 explorer.exe 或 TotalCmd.exe (如果是在 Total Commander 中使用右键菜单的话) 的 LANG 也被修改，造成由 explorer 启动的 gVim 的 LANG 也成了被去掉 .UTF-8 的值 (因为子进程默认会继承父进程的环境变量)。后来又想起了 Cygwin 里的 OUTPUT&#95;CHARSET 环境变量，可以在 gvimext 里将获取到的 UTF-8 消息文本使用 iconv() 转换为 OUTPUT_CHARSET 设定的编码，这样问题就可以圆满的解决了。</p>

<p>直到今天打算来实施这个想法时，又回头去看了一下以前 Google 到的这篇 <a href="http://www.linuxselfhelp.com/HOWTO/Unicode-HOWTO-3.html">The Unicode HOWTO: Locale setup</a>，才发现原来 glibc 本来就有这样的自动编码转换能力，并且 2.2 以后的版本也不再需要设定 OUTPUT&#95;CHARSET 了。偶太无知无畏了……</p>

<p>那么 gVim 安装版里的 libintl.dll 肯定不是 gcc 编译的，所以没有自动编码转换能力导致乱码，用 PEiD 看了一下果然是 MS VC 6.0 编译。接下来就简单了，去 <a href="http://gnuwin32.sourceforge.net/">GnuWin32</a> 的 <a href="http://gnuwin32.sourceforge.net/packages/libintl.htm">LibIntl</a> 页面下载 Binaries 和 Dependencies 两个压缩包，取得其中的 libintl3.dll 和 libiconv2.dll，前者改名为 libintl.dll (gVim 被硬编码为只尝试载入 libintl.dll 这个文件，想了想没必要改源代码，因为以后 LibIntl 出了新版本 libintl3.dll 里的 3 还会变化)。然后将这两个文件放到 PATH 环境变量中列出的任意一个目录里，最后删掉 gVim 安装目录下的 libintl.dll，OK，一切都是那么完美了。:p</p>

	标签：<a href="http://rainux.org/tag/gvim/" title="gVim" rel="tag">gVim</a>, <a href="http://rainux.org/tag/software_%e8%bd%af%e4%bb%b6/" title="Software_软件" rel="tag">Software_软件</a>, <a href="http://rainux.org/tag/vim/" title="Vim" rel="tag">Vim</a>, <a href="http://rainux.org/tag/windows/" title="Windows" rel="tag">Windows</a><br />
]]></content:encoded>
			<wfw:commentRss>http://rainux.org/%e8%a7%a3%e5%86%b3-gvimext-%e5%9c%a8-utf-8-locale-%e4%b8%8b%e4%b9%b1%e7%a0%81%e7%9a%84%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>一组能让你爽出内伤的 Vim motion</title>
		<link>http://rainux.org/%e4%b8%80%e7%bb%84%e8%83%bd%e8%ae%a9%e4%bd%a0%e7%88%bd%e5%87%ba%e5%86%85%e4%bc%a4%e7%9a%84-vim-motion</link>
		<comments>http://rainux.org/%e4%b8%80%e7%bb%84%e8%83%bd%e8%ae%a9%e4%bd%a0%e7%88%bd%e5%87%ba%e5%86%85%e4%bc%a4%e7%9a%84-vim-motion#comments</comments>
		<pubDate>Tue, 27 Mar 2007 15:56:16 +0000</pubDate>
		<dc:creator>Rainux</dc:creator>
				<category><![CDATA[Software 软件]]></category>
		<category><![CDATA[Software_软件]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://www.rainux.org/2007/03/28/149</guid>
		<description><![CDATA[Vim 用户都应该知道 Vim 的 Normal 模式下 operator + motion 组合的便利，比如 daw 删除光标下的普通单词以及其后的空格 ciW 删除光标下的以空格分隔的“单词”并进入插入模式 (i 表示 inner，不删除单词后的空格) yis 复制光标下的句子到默认寄存器 确实这几个都比较平淡无奇，不过请看以下这些 ci[ 删除一对 [] 中的所有字符并进入插入模式 ci( 删除一对 () 中的所有字符并进入插入模式 ci&#60; 删除一对 &#60;> 中的所有字符并进入插入模式 ci{ 删除一对 {} 中的所有字符并进入插入模式 cit 删除一对 HTML/XML 的标签内部的所有字符并进入插入模式 ci" ci' ci&#96; 删除一对引号字符 (" 或 ' 或 &#96;) 中所有字符并进入插入模式 怎么样？ci[ ci&#60; cit 在编辑 PHP [...]]]></description>
			<content:encoded><![CDATA[<p>Vim 用户都应该知道 Vim 的 Normal 模式下 operator + motion 组合的便利，比如</p>

<ul>
<li>daw 删除光标下的普通单词以及其后的空格</li>
<li>ciW 删除光标下的以空格分隔的“单词”并进入插入模式 (i 表示 inner，不删除单词后的空格)</li>
<li>yis 复制光标下的句子到默认寄存器</li>
</ul>

<p>确实这几个都比较平淡无奇，不过请看以下这些</p>

<ul>
<li>ci[ 删除一对 [] 中的所有字符并进入插入模式</li>
<li>ci( 删除一对 () 中的所有字符并进入插入模式</li>
<li>ci&lt; 删除一对 &lt;> 中的所有字符并进入插入模式</li>
<li>ci{ 删除一对 {} 中的所有字符并进入插入模式</li>
<li>cit 删除一对 HTML/XML 的标签内部的所有字符并进入插入模式</li>
<li>ci" ci' ci&#96; 删除一对引号字符 (" 或 ' 或 &#96;) 中所有字符并进入插入模式</li>
</ul>

<p>怎么样？ci[ ci&lt; cit 在编辑 PHP 或者 HTML 源码时简直太爽了 (当然 matchit 插件增强的 motion % 也是必不可少的)，ci" ci' ci&#96; 几乎在编辑任何语言的源代码时修改字符串都会非常方便。不过可惜的是以上这些严格的说只能叫文本对象选择，不是 motion，因此只能跟在 v 命令或者某个 operator 后面。可恨用了两年 Vim 居然今天才想起查 Vim 帮助里的 motion.txt。 -_-b</p>

	标签：<a href="http://rainux.org/tag/software_%e8%bd%af%e4%bb%b6/" title="Software_软件" rel="tag">Software_软件</a>, <a href="http://rainux.org/tag/vim/" title="Vim" rel="tag">Vim</a><br />
]]></content:encoded>
			<wfw:commentRss>http://rainux.org/%e4%b8%80%e7%bb%84%e8%83%bd%e8%ae%a9%e4%bd%a0%e7%88%bd%e5%87%ba%e5%86%85%e4%bc%a4%e7%9a%84-vim-motion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vim 7.0c beta Win32 binary</title>
		<link>http://rainux.org/vim-70c-beta-win32-binary</link>
		<comments>http://rainux.org/vim-70c-beta-win32-binary#comments</comments>
		<pubDate>Mon, 03 Apr 2006 15:58:45 +0000</pubDate>
		<dc:creator>Rainux</dc:creator>
				<category><![CDATA[Software 软件]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Software_软件]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://rainux.sefans.com/blog/?p=131</guid>
		<description><![CDATA[偶拿 Microsoft Visual C++ 7.1 编译的，非 OLE 的 GUI 版本和 console 版本。 四个文件保持目录结构解压到某个地方，运行其中的 install.exe 即可。需要注意的是这些压缩包中没有 iconv.dll 和 diff.exe。如果你认为自己解决这些问题比较麻烦，或许你应该等待偶发布 NSIS 的安装程序的版本。 下载: gvim70c.zip vim70clang.zip vim70crt.zip vim70cw32.zip 附上偶的 .vimrc 文件: .vimrc 标签：Software_软件, Vim, Windows]]></description>
			<content:encoded><![CDATA[<p>偶拿 Microsoft Visual C++ 7.1 编译的，非 OLE 的 GUI 版本和 console 版本。</p>

<p>四个文件保持目录结构解压到某个地方，运行其中的 install.exe 即可。需要注意的是这些压缩包中没有 iconv.dll 和 diff.exe。如果你认为自己解决这些问题比较麻烦，或许你应该等待偶发布 NSIS 的安装程序的版本。</p>

<p>下载:
<a href="/vim/gvim70c.zip">gvim70c.zip</a>
<a href="/vim/vim70clang.zip">vim70clang.zip</a>
<a href="/vim/vim70crt.zip">vim70crt.zip</a>
<a href="/vim/vim70cw32.zip">vim70cw32.zip</a></p>

<p>附上偶的 .vimrc 文件:
<a href="/vim/.vimrc">.vimrc</a></p>

	标签：<a href="http://rainux.org/tag/software_%e8%bd%af%e4%bb%b6/" title="Software_软件" rel="tag">Software_软件</a>, <a href="http://rainux.org/tag/vim/" title="Vim" rel="tag">Vim</a>, <a href="http://rainux.org/tag/windows/" title="Windows" rel="tag">Windows</a><br />
]]></content:encoded>
			<wfw:commentRss>http://rainux.org/vim-70c-beta-win32-binary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>正确设置 Vim 的字符编码选项 (gVim/Vim on Win32 中文环境)</title>
		<link>http://rainux.org/vim-gvimvim-on-win32</link>
		<comments>http://rainux.org/vim-gvimvim-on-win32#comments</comments>
		<pubDate>Wed, 19 Oct 2005 17:16:07 +0000</pubDate>
		<dc:creator>Rainux</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Software 软件]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Software_软件]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://rainux.sefans.com/blog/?p=106</guid>
		<description><![CDATA[和所有的流行文本编辑器一样，Vim 可以很好的编辑各种字符编码的文件，这当然包括 UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是，和很多来自 Linux 世界的软件一样，这需要你自己动手设置。 Vim 有四个跟字符编码方式有关的选项，encoding、fileencoding、fileencodings、termencoding（这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names），它们的意义如下: encoding: Vim 内部使用的字符编码方式，包括 Vim 的 buffer（缓冲区）、菜单文本、消息文本等。用户手册上建议只在 .vimrc 中改变它的值，事实上似乎也只有在 .vimrc 中改变它的值才有意义。 fileencoding: Vim 中当前编辑的文件的字符编码方式，Vim 保存文件时也会将文件保存为这种字符编码方式（不管是否新文件都如此）。 fileencodings: Vim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式，并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将 Unicode 编码方式放到这个列表的最前面，将拉丁语系编码方式 latin1 放到最后面。 termencoding: Vim 所工作的终端（或者 Windows 的 Console 窗口）的字符编码方式。这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效，而对 Console 模式的 Vim 而言就是 Windows [...]]]></description>
			<content:encoded><![CDATA[<p>和所有的流行文本编辑器一样，Vim 可以很好的编辑各种字符编码的文件，这当然包括 UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是，和很多来自 Linux 世界的软件一样，这需要你自己动手设置。</p>

<p>Vim 有四个跟字符编码方式有关的选项，encoding、fileencoding、fileencodings、termencoding（这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names），它们的意义如下:</p>

<ul>
<li>encoding: Vim 内部使用的字符编码方式，包括 Vim 的 buffer（缓冲区）、菜单文本、消息文本等。<del>用户手册上建议只在 .vimrc 中改变它的值，事实上似乎也只有在 .vimrc 中改变它的值才有意义。</del></li>
<li>fileencoding: Vim 中当前编辑的文件的字符编码方式，Vim 保存文件时也会将文件保存为这种字符编码方式（不管是否新文件都如此）。</li>
<li>fileencodings: Vim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式，并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将 Unicode 编码方式放到这个列表的最前面，将拉丁语系编码方式 latin1 放到最后面。</li>
<li>termencoding: Vim 所工作的终端（或者 Windows 的 Console 窗口）的字符编码方式。这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效，而对 Console 模式的 Vim 而言就是 Windows 控制台的代码页，并且通常我们不需要改变它。</li>
</ul>

<p>好了，解释完了这一堆容易让新手犯糊涂的参数，我们来看看 Vim 的多字符编码方式支持是如何工作的。</p>

<ol>
<li>Vim 启动，根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。</li>
<li>读取需要编辑的文件，根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的，看起来是正确的（<a href="#note1">注1</a>）字符编码方式。</li>
<li>对比 fileencoding 和 encoding 的值，若不同则调用 iconv 将文件内容转换为 encoding 所描述的字符编码方式，并且把转换后的内容放到为此文件开辟的 buffer 里，此时我们就可以开始编辑这个文件了。注意，完成这一步动作需要调用外部的 iconv.dll（<a href="#note2">注2</a>），你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。</li>
<li>编辑完成后保存文件时，再次对比 fileencoding 和 encoding 的值。若不同，再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式，并保存到指定的文件中。同样，这需要调用 iconv.dll</li>
</ol>

<p>由于 Unicode 能够包含几乎所有的语言的字符，而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式（空间消耗比 UCS-2 小），因此建议 encoding 的值设置为 utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时，Vim 自动探测文件的编码方式会更准确（或许这个理由才是主要的 ;）。我们在中文 Windows 里编辑的文件，为了兼顾与其他软件的兼容性，文件编码还是设置为 GB2312/GBK 比较合适，因此 fileencoding 建议设置为 chinese（chinese 是个别名，在 Unix 里表示 gb2312，在 Windows 里表示 cp936，也就是 GBK 的代码页）。</p>

<p>以下是我的 .vimrc 中关于字符编码方式设置的内容，这个设置比较有弹性，可以根据系统中的环境变量 $LANG（当然，Windows 中的写法是 %LANG%）的值来自动设置合适的字符编码方式。此时，推荐设置 %LANG% = zh_CN.UTF-8，可以通过后面的 Windows 注册表脚本文件来方便的做到。</p>

<pre name="code" class="vim">" Multi-encoding setting, MUST BE IN THE BEGINNING OF .vimrc!

if has("multi_byte")
  " When 'fileencodings' starts with 'ucs-bom', don't do this manually
  " set bomb
  set fileencodings=ucs-bom,chinese,taiwan,japan,korea,utf-8,latin1
  " CJK environment detection and corresponding setting
  if v:lang =~ "^zh_CN"
    " Simplified Chinese, on Unix euc-cn, on MS-Windows cp936
    set encoding=chinese
    set termencoding=chinese
    if &amp;fileencoding == ''
      set fileencoding=chinese
    endif
  elseif v:lang =~ "^zh_TW"
    " Traditional Chinese, on Unix euc-tw, on MS-Windows cp950
    set encoding=taiwan
    set termencoding=taiwan
    if &amp;fileencoding == ''
      set fileencoding=taiwan
    endif
  elseif v:lang =~ "^ja_JP"
    " Japanese, on Unix euc-jp, on MS-Windows cp932
    set encoding=japan
    set termencoding=japan
    if &amp;fileencoding == ''
      set fileencoding=japan
    endif
  elseif v:lang =~ "^ko"
    " Korean on Unix euc-kr, on MS-Windows cp949
    set encoding=korea
    set termencoding=korea
    if &amp;fileencoding == ''
      set fileencoding=korea
    endif
  endif
   " Detect UTF-8 locale, and override CJK setting if needed
  if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
    set encoding=utf-8
  endif
else
  echoerr 'Sorry, this version of (g)Vim was not compiled with "multi_byte"'
endif
</pre>

<p>Windows 注册表脚本。</p>

<pre><code>Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\\Environment]
"LANG"="zh_CN.UTF-8"
</code></pre>

<p><a name="note1">注1</a>: 事实上，Vim 的探测准确度并不高，尤其是在 encoding 没有设置为 utf-8 时。因此强烈建议将 encoding 设置为 utf-8<del datetime="2007-04-08T14:49:42+00:00">，虽然<ins datetime="2005-9-21T13:23:5--8:00">如果你想 Vim 显示中文菜单和提示消息的话</ins>这样会带来另一个小问题。参见另一篇 Win32 下 Vim 设置 enconding 为 utf-8 会在显示特定消息时崩溃</del>。（此处提到的崩溃问题在 gVim 7.0 beta 时代就已经被解决了。）</p>

<p><a name="note2">注2</a>: 在 GNU 的 FTP 上可以下载到 <a href="http://mirrors.kernel.org/gnu/libiconv/libiconv-1.9.1.bin.woe32.zip">iconv 的 Win32 版</a>，不推荐去 <a href="http://gnuwin32.sourceforge.net">GnuWin32</a> 下载 libiconv，因为那个版本旧一些，并且需要自己改名 dll 文件。</p>

	标签：<a href="http://rainux.org/tag/gnu-linux/" title="GNU/Linux" rel="tag">GNU/Linux</a>, <a href="http://rainux.org/tag/software_%e8%bd%af%e4%bb%b6/" title="Software_软件" rel="tag">Software_软件</a>, <a href="http://rainux.org/tag/vim/" title="Vim" rel="tag">Vim</a>, <a href="http://rainux.org/tag/windows/" title="Windows" rel="tag">Windows</a><br />
]]></content:encoded>
			<wfw:commentRss>http://rainux.org/vim-gvimvim-on-win32/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

