让Vim在Windows上完全支持UTF-8

4
我在Windows上使用vim和gVim,在虚拟Linux环境中编程时使用vim。我经常需要更改gettext目录文件。然而,由于字符集的原因,两个Windows版本的Unicode字符支持似乎不完整。
例如,umlauts(äöü)可以正常工作;但是排版引号(„“或“ˮ)和一些其他字符,如mdash和ellipse则不能(它们在Linux box中可以)。 Vim会报告转换错误并以只读模式打开文件;即使覆盖并存储,这些字符也会破坏。
其他Windows程序可以很好地支持这些字符,例如TortoiseSVN。
请注意,这不是“错误编码”问题,比如latin-1而不是utf-8,因为这也会影响umlauts。我知道设置enc,fenc,fencs和:e ++enc=utf-8。
:version告诉我:版本7.3,MS Windows 32位GUI版本w/OLE支持,包括修正1-46;+multi_byte_ime/dyn。
更新:升级到Vim 7.4并没有解决问题。+multi_byte_ime/dyn,并且,由于选项现在列出得更容易阅读,+digraphs-xfontset-postscript(我不知道它们是否有用)。
由于我使用Linux Vim(仍为7.3,包括修正1-547)和通过Samba更新的Windows gVim在相同的文件上工作,因此我尝试了以下操作:使用Linux版本打开目录文件,它可以正确处理有趣的引号字符(:set enc?fenc?→encoding=utf-8,fileencoding=utf-8),并将其保存为Latin-1(:set fenc=latin-1(文件标记已更改),更新标记,:w)。我得到了转换错误;但是,一些更改已被写入。
当使用相同的Linux版本重新打开文件时,我得到了正确的umlauts,encoding=utf-8/fileencoding=latin-1,但引号字符不正确。

1
你的“编码”设置是什么?使用utf-8(并且文件格式相同),就不需要进行转换,因此也不会出现这样的错误。 - Ingo Karkat
我的文件保存为utf-8编码,特别是gettext目录(.po)。对于这些文件,编码包含在“Content-Type”头中(并用于编译为.mo文件)。 - Tobias
2个回答

8
阅读了问题如何在VIM或Gvim中查看UTF-8字符后,我尝试了几个guifont设置(:set guifont?未返回任何内容),事实上其中一些具有印刷排版引号。

以下guifont设置在我使用的Windows 8.1系统上有效:

  • Lucida_Console
  • DejaVu_Sans_Mono
  • Courier_New
  • Consolas

对于guifontwide,我发现

  • MS_Mincho

可用于中文字符。


作为这篇答案的作者,我想澄清一下,guifontwideMS_Mincho信息并不是我添加的;我没有任何多字节字符集方面的经验。这应该是一条(对于某些受众来说可能很有用的)评论,而不是编辑。 - Tobias
更一般地说,您可以使用http://vim.wikia.com/wiki/Setting_the_font_in_the_GUI中描述的方法在自己的系统上尝试字体。 - Eric O. Lebigot

1
我一直以来在Windows上将文件编码转换为UTF-8的唯一方法是使用Notepad ++或PowerShell(请参见下文)。不管VIM版本如何,在VIM内部更改文件编码最多只能给出不一致的结果。
一旦在vim之外设置了UTF-8编码的文件,就不会再有其他问题。通过vim在linux或mac上设置的文件编码会被Windows所认可。
this thread中,建议使用PowerShell命令来更改编码。这是我知道的在windowws上将项目设置为UTF-8并且无需进一步麻烦的最快方法。
在您上面的示例中,请注意:set encoding = utf-8 (这是临时的,仅在显示中)和 set fileencoding = utf-8 之间存在区别,后者将在保存时更改文件。

正如我一开始所说的那样:这不是关于使用 utf-8 替代 latin-1。这是关于 utf-8 对于像引号、破折号和省略号这样的 (稍微) 更有趣的字符无法正常工作,但对于变音符号却可以。 - Tobias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接