4

我在 WinXP 上使用 Vim 7.3。我在工作中使用由应用程序生成的 XML 文件,该应用程序使用 UCS-2le 编码编写它们。在 vim wiki 上阅读了几篇关于编码的文章后,我发现了以下建议,即在 vimrc 中设置我的文件编码:

set fileencodings=ucs-bom,utf-8

有问题的文件以 FF EE 作为第一个字符(已确认使用 HxD 查看),但 Vim 无法正确打开它。我可以在我的 vimrc 中正确打开我的 UCS-2le 文件:

set fileencodings=ucs-2le, utf-8

但是现在我的 UTF-8 文件一团糟!

任何建议如何进行?我通常在没有 MSwin 的情况下运行 Gvim(如果重要的话)。我使用的插件很少。我关于文件编码的实际 vimrc 设置是:

set encoding=utf-8
set fileencodings=ucs-bom,utf-8,ucs-2le,latin1

第三个位置的 ucs-2le 条目似乎没有什么区别。据我了解,第一个条目(设置编码)是 Vim 在其缓冲区内部使用的编码,而第二个(设置文件编码)处理 vim 读取和写入文件时的文件编码。因此,在我看来,由于文件具有字节顺序标记,因此 ucs-bom 作为 setfileencodings 中的第一个条目应该捕获它。据我所知,vim 似乎无法识别该文件是每个字符 16 个字节。

注意:我可以/确实通过在打开 ucs-2le 文件时手动设置文件编码来解决问题:

edit ++enc=ucs2-le

干杯。

4

1 回答 1

1

解决了。我不确定我做了什么,但所提到的修复程序现在可以完美地读取和写入我的 UCS-2 文件 - 尽管由于未知原因没有立即(我刚刚重新启动 Vim 吗?)。我可以尝试扭转修复以查看哪个是关键更改,但这就是我所做的(另请参阅我在上面 7 月 27 日的评论):

  • 将 AutoFenc.vim 插件放在我的插件文件夹中(自动检测文件编码(AutoFenc.vim)。
  • 将 iconv.dll 和新版本的 libintl.dll 添加到我的 vim73 文件夹 ( Vim.org )
  • 编辑 vimrc 如下

vimrc 现在包含(最后一位只是通过在状态行中显示文件编码来更容易地查看文件编码发生了什么):

"use utf-8 by default
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,ucs-2le,latin1

"always show status line
set laststatus=2

"show encoding in status line http://vim.wikia.com/wiki/Show_fileencoding_and_bomb_in_the_status_line
if has("statusline")
 set statusline=%<%f\ %h%m%r%=%{\"[\".(&fenc==\"\"?&enc:&fenc).((exists(\"+bomb\")\ &&\ &bomb)?\",B\":\"\").\"]\ \"}%k\ %-14.(%l,%c%V%)\ %P
endif

一切都很好。

于 2012-08-16T16:01:57.710 回答