27

我用 Vim 编辑各种文件(我相信大多数 Vim 用户都会这样做)。我遇到的一个问题是当我遇到一个具有奇怪编码的文件时,Vim 会做什么。大多数编辑器(这些天)在检测文件编码方面做得很好。但是,Vim 通常不会。你必须输入,例如:

:e ++enc=utf-16le

以 UTF-16 重新读取文件(否则你会得到大量的 @ 符号)

我一直在四处寻找,并看到set_utf8.vim了可以检测特定文件编码的脚本。但是,是否有更通用的解决方案?每次打开不寻常的文件时,我都不得不手动计算文件编码并咨询帮助,这让我有点厌烦。

4

3 回答 3

18

添加编码名称'fileencodings'应该可以解决问题:

:set fencs=ucs-bom,utf-16le,utf-8,default,latin1

或者,还有AutoFencfencview 之类的插件。

于 2012-10-19T09:27:22.417 回答
4

将此代码添加到您的.vimrc

if has("multi_byte")
  if &termencoding == ""
    let &termencoding = &encoding
  endif
  set encoding=utf-8
  setglobal fileencoding=utf-8
  "setglobal bomb
  set fileencodings=ucs-bom,utf-8,latin1
endif
于 2014-12-23T05:39:07.987 回答
3

你有字节顺序标记吗?Vim 应该检测到这一点并正常工作。从文档 - 第 45.4 节

当你开始编辑那个 16 位 Unicode 文件并且它有一个 BOM 时,Vim 会检测到这个并在读取它时将文件转换为 utf-8。'fileencoding' 选项(末尾没有 s)设置为检测到的值。在这种情况下,它是“utf-16le”。这意味着它是 Unicode、16 位和 little-endian。这种文件格式在 MS-Windows 上很常见(例如,用于注册表文件)。

于 2012-10-19T08:42:47.527 回答