我使用Vim编辑各种文件(因为我确信大多数Vim用户都这样做)。我遇到的一个错误就是Vim在遇到带有奇数编码的文件时所做的事情。大多数编辑(这些天)在检测文件编码方面做得很好。但是,Vim通常不会。你必须打字,例如:
:e ++enc=utf-16le
以UTF-16重新读取文件(否则你会得到大量的@符号)
我一直在搜索,看过像set_utf8.vim
这样可以检测特定文件编码的脚本。但是,有更一般的解决方案吗?我有点无聊,必须手动计算文件编码是什么,并在每次打开一个不寻常的文件时咨询帮助。
答案 0 :(得分:15)
将编码名称添加到'fileencodings'
应该可以解决问题:
:set fencs=ucs-bom,utf-16le,utf-8,default,latin1
答案 1 :(得分:2)
你有字节顺序标记吗? Vim应该检测到这一点并正常工作。来自the doc - section 45.4:
当你开始编辑那个16位的Unicode文件时,它有一个BOM,Vim 将检测到这一点并在读取时将文件转换为utf-8。该 'fileencoding'选项(最后没有s)设置为检测到的 值。在这种情况下,它是“utf-16le”。这意味着它是Unicode, 16位和小端。此文件格式在MS-Windows上很常见 (例如,对于注册表文件)。
答案 2 :(得分:1)
将此代码添加到 .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