我遇到了几次问题,因为默认情况下vim的编码设置为latin1而我没有注意到并假设它使用的是utf-8。现在我有了,我想设置vim,以便它在所有明显的情况下做正确的事情,并默认使用utf-8。
我想避免的事情:
到目前为止我得到了什么:
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
移到了自己的语句中,否则它实际上不起作用。由于我对物料清单的不确定性,我也评论了这条线。
我在寻找什么:
最终,我希望这会产生一个无需思考的复制/粘贴代码段,它将为utf-8设置vim,默认情况下可以跨平台工作。
编辑:我已经将我自己的答案标记为现在已被接受,据我所知,它可以正常工作并且可以合理地解释所有可以解释的事情。但它不是一成不变的;如果您有任何新信息,请随时回答!
答案 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-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
)因为:
在阅读文件时,fileencoding
将根据fileencodings
自动设置。所以它只对新文件有用。再次根据docs:
对于新文件的全局值 使用'fileencoding'。
答案 1 :(得分:2)
我认为拥有一个vanilla vimrc + fenc = utf-8
就足够了剩下的应该是相当不错的开箱即用的
我只在具有Microsoft工具的Windows平台上使用BOM(尽管其中一些甚至无法总是编写BOM;但它是Notepad Unicode保存,.NET XmlWriter和MS平台的其他中心点的默认值工具)