如何在utf-8中正确设置vim进行编辑

时间:2011-03-29 19:02:35

标签: vim unicode encoding utf-8

我遇到了几次问题,因为默认情况下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开始,稍作修改。我将bombsetglobal fileencoding移到了自己的语句中,否则它实际上不起作用。由于我对物料清单的不确定性,我也评论了这条线。

我在寻找什么:

  • 避免错过的可能陷阱
  • 现有代码的问题
  • 链接到已经讨论/列出的任何地方

最终,我希望这会产生一个无需思考的复制/粘贴代码段,它将为utf-8设置vim,默认情况下可以跨平台工作。

编辑:我已经将我自己的答案标记为现在已被接受,据我所知,它可以正常工作并且可以合理地解释所有可以解释的事情。但它不是一成不变的;如果您有任何新信息,请随时回答!

2 个答案:

答案 0 :(得分:24)

为了回应,我会回答我自己的问题!我删除了我对原始问题所做的更新,并将其移至此答案。这可能是更好的方法。

答案:

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-bomfileencodings中的第一个,vim就能够检测和处理带有BOM的现有文件,因此也不需要它。

我删除了fileencodings行,因为在这种情况下不需要它。来自Vim docsWhen 'encoding' is set to a Unicode encoding, and 'fileencodings' was not set yet, the default for 'fileencodings' is changed.

我使用setglobal filencoding(而不是set fileencoding)因为: 在阅读文件时,fileencoding将根据fileencodings自动设置。所以它只对新文件有用。再次根据docs

  

对于新文件的全局值   使用'fileencoding'。

答案 1 :(得分:2)

我认为拥有一个vanilla vimrc + fenc = utf-8

就足够了

剩下的应该是相当不错的开箱即用的

我只在具有Microsoft工具的Windows平台上使用BOM(尽管其中一些甚至无法总是编写BOM;但它是Notepad Unicode保存,.NET XmlWriter和MS平台的其他中心点的默认值工具)