如何正确设置 vim 以在 utf-8 中进行编辑
Posted
技术标签:
【中文标题】如何正确设置 vim 以在 utf-8 中进行编辑【英文标题】:How to setup vim properly for editing in utf-8 【发布时间】:2011-03-29 19:02:35 【问题描述】:我遇到了几次问题,因为 vim 的编码默认设置为 latin1,我没有注意到并认为它使用的是 utf-8。现在我有了,我想设置 vim 以便它在所有明显的情况下都能做正确的事情,并默认使用 utf-8。
我想避免的事情:
强制以其他编码保存的文件在我的更改之前可以工作以 utf-8 格式打开,导致乱码。 强制不支持多字节字符的终端(如 Windows XP 终端)尝试显示它们,从而导致乱码。 干扰其他程序读取或编辑文件的能力(我对默认使用 BOM 有一种(可能是不合理的)反感,因为我不清楚它有多大可能会弄乱其他程序。) 我不太了解的其他问题(但希望你能猜到!)到目前为止我的收获:
if has("multi_byte")
if &termencoding == ""
let &termencoding = &encoding
endif
set encoding=utf-8 " better default than latin1
setglobal fileencoding=utf-8 " change default file encoding when writing new files
"setglobal bomb " use a BOM when writing new files
set fileencodings=ucs-bom,utf-8,latin1 " order to check for encodings when reading files
endif
这是从vim wiki 中提取并稍作修改的。我将bomb
从setglobal fileencoding
移到了它自己的语句中,否则它实际上不起作用。由于我对 BOM 的不确定性,我还注释掉了该行。
我在寻找什么:
我错过的可能避免的陷阱 现有代码存在问题 链接到已讨论/已列出的任何地方最终,我希望这会产生一个无需考虑的复制/粘贴 sn-p,它将默认为 utf-8 设置 vim,跨平台工作。
编辑:我已经将我自己的答案标记为目前已接受,据我所知,它可以正常工作并考虑到它可以合理解释的所有事情。但这不是一成不变的。如果您有任何新信息,请随时回答!
【问题讨论】:
嘿尼克,你是从here 那里得到的吗?它对这些位有一些体面的解释。 是的,我希望我说清楚了。代码块正下方的第一句话链接到它,并说“这是从vim wiki中获取并稍作修改的”。 【参考方案1】:作为对 sehe 的回应,我将尝试回答我自己的问题!我删除了对原始问题所做的更新,并将它们移至此答案。这可能是更好的方法。
答案:
if has("multi_byte")
if &termencoding == ""
let &termencoding = &encoding
endif
set encoding=utf-8 " better default than latin1
setglobal fileencoding=utf-8 " change default file encoding when writing new files
endif
我删除了bomb
行,因为根据BOM Wikipedia page,使用utf-8 时不需要它,实际上破坏了ASCII 向后兼容性。只要ucs-bom
在fileencodings
中排在第一位,vim 就能够检测和处理带有 BOM 的现有文件,因此也不需要这样做。
我删除了fileencodings
行,因为在这种情况下不需要它。来自Vim docs:When 'encoding' is set to a Unicode encoding, and 'fileencodings' was not set yet, the default for 'fileencodings' is changed.
我使用setglobal filencoding
(而不是set fileencoding
)是因为:
读取文件时,会根据fileencodings
自动设置fileencoding
。所以它只对新文件很重要。并再次根据docs:
对于一个新文件的全局值 使用了“文件编码”。
【讨论】:
这个 sn-p 直接进入我的 rc 文件。在我对拉丁语 1 的讨伐中迈出了非常重要的一步。非常感谢你。 没问题!很高兴能帮上忙。 太棒了。我重新找到了这些信息,因为我现在自己是 WinXP 的受害者...... :) SO 也是这样的公共笔记本! 您使用哪个终端来完成这项工作?这是 gVim 还是控制台 Vim? 我通常使用 MacVim 或 gVim,但这些设置应该适用于所有控制台和图形界面。当我写这篇文章时,我可能在任何 Ubuntu 的默认终端、Win7 终端和 iTerm 2 上尝试过。【参考方案2】:我认为有一个 vanilla vimrc + fenc=utf-8 就足够了
其余的应该是相当不错的开箱即用
我只会在带有 Microsoft 工具的 Windows 平台上使用 BOM(尽管其中一些无法始终编写 BOM;但是它是记事本 Unicode 保存、.NET XmlWriter 和 MS 平台的其他中心点的默认设置工具)
【讨论】:
很高兴了解Windows平台上的BOM,谢谢!不幸的是,在我的 .vimrc 中打开一个只有fenc=utf-8
的 utf-8 文件并不能完全消除它。用它打开我的测试文件会给我以下信息:should have a BOM and be in utf-8 '‒'
那是在什么平台上?在我的 linux 机器上,默认情况下是 fileencodings=ucs-bom,utf-8,default,latin1
,所以它可以工作。这是在 Ubuntu Maverick、vim 7.2(补丁 1-330)上,并且在(全局)vimrc 或 debian.vim 中没有与编码相关的标志
在 Windows XP 上,vim 7.3。这实际上很有趣。我认为平台之间会有一些差异,但很高兴有一个关于这个问题的具体例子。
WinXP/7.3上的fencs默认值是多少?
貌似是fileencodings=ucs-bom
。以上是关于如何正确设置 vim 以在 utf-8 中进行编辑的主要内容,如果未能解决你的问题,请参考以下文章
如何设置正确的 Ruby 版本以在 Aptana 3 中与我的 Rails 5 项目一起使用?