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

我遇到过几次问题因为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开始稍作修改的。我将炸弹从setglobal fileencoding移动到它自己的语句,因为否则它实际上不起作用。由于我对BOM的不确定性,我也评论了这条线。

我在找什么:

>可能的陷阱,以避免我错过
>现有代码存在问题
>链接到已经讨论过的任何地方

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

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

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

答案:

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

删除了炸弹线,因为根据BOM Wikipedia page,使用utf-8时不需要它,实际上违反了ASCII向后兼容性。只要ucs-bom是fileencodings中的第一个,vim就能够检测和处理带有BOM的现有文件,因此也不需要它。

删除了fileencodings行,因为在这种情况下不需要它。从Vim docs:当’encoding’设置为Unicode编码,并且’fileencodings’尚未设置时,’fileencodings’的默认值被更改。

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

For a new file the global value of ‘fileencoding’ is used.

相关文章

普通模式 >G 增加当前行到文档末尾处的缩紧层级 $ 移动到本行的末尾 . 相当于一个...
原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属...
原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模...
 =   赋值操作符,可以用于算术和字符串赋值 +        加法计算     -        减法运算...
1.根据包名来查看指定的APP指定数据 adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数...
ctrl+F 向下翻页 ctrl+B 向下翻页 u 取消最近一次操作 U 取消当前行的操作 ZZ 保存当前内容并退出 gg 跳...