如何让vim识别文件的编码?

21

我注意到,在使用除 '标准英语' 以外的某些编码时,vim 无法正确识别和显示字符。

最容易看到的是打开一些来自网络上使用 cp437 编码页的 ASCII 图形或类似文件。

有没有办法让 vim 在打开文件时检查编码,并使用正确的编码打开文件?

您使用哪些编码作为最“便携”的编码(即最大数量的用户将遇到最少问题的编码)?


你所面临的问题与英语关系不大,因为许多在英语中使用的标点符号在ASCII中都没有,例如破折号和一些货币符号,包括一些英语国家的货币符号。 ASCII只考虑了美式英语,而这并不是真正的“标准”,尽管美国人喜欢假装它是。;-) - Michael Scheper
5个回答

25

Vim需要检测编码,这可能会带来问题,因为文件通常不会明确说明它们的编码(一个明显的例外是具有头部编码属性的XML文件)。

您可以通过以下方式强制Vim使用不同的编码重新加载文件:

:e ++enc=cp437

如果你愿意,可以在你的 .vimrc 中设置默认编码。

这个页面提供了更多信息和链接,特别是关于编辑Unicode。 UTF-8 是最广泛使用的编码,也是你应该选择的默认编码。


1
很高兴看到世界各地有这么聪明的人。感谢您提供如此有用的答案 ;) - Olivier Pons
1
++是什么意思? - Yu Jiaao

6
您可以使用vim模型来设置文件的编码。这只是一个注释,位于文件的前五行中,并以vi:set fileencoding=cp437开头。
您也可以用“vim:”代替“vi:set”,但后者与更多编辑器兼容。您绝对需要在这些前缀之间以及“fileencoding”或您想要设置的任何选项之间加上空格。然而,fileencoding选项应该解决您的问题。
因此,在Python或.rc文件中,您可以将其放在文件顶部:
# vi: set fileencoding=cp437

在Java、C、C++、JavaScript等语言中,可以将以下内容放置于代码中:


// vi: set fileencoding=cp437

获取更多信息,在vim中输入:help modeline


以下是关于编程的相关内容,请翻译成中文。仅返回翻译后的文本:根据用户@SumnerHayes建议进行编辑,以表明modeline必须是文件中的前五行之一。 - Michael Scheper

1
你可以在 .vimrc 中设置变量 'fileencodings'。
这是一个在编辑现有文件时考虑的字符编码列表。当读取文件时,Vim 尝试使用第一个提到的字符编码。如果检测到错误,则尝试下一个编码。当找到有效的编码时,'fileencoding' 就会被设置为它。如果所有编码都失败了,'fileencoding' 就会被设置为空字符串,这意味着将使用 'encoding' 的值。
请参见 ':help filencodings'。
如果你经常使用例如 cp437 或 cp1252,你可以在那里添加它。
set fileencodings=ucs-bom,utf-8,cp1252,default,latin9

0

您可以使用Unicode对文件进行编码,并在文件中设置字节顺序标记(BOM)。这将使vim适当地处理它,但某些编译器和程序可能会遇到问题。即使是一些基本的shell命令,如cat,也可能在某些用例中表现不佳。

要执行此操作,请在vim中键入以下内容:

:set fileencoding=utf-8
:set bomb
:w

获取更多信息,请键入:

:help bomb

0
在你的 .vimrc 文件末尾添加以下内容:(如果需要,可以将“utf-8”替换为“latin1”)
if len(&fenc) == 0
  silent! exe "e! ++enc=utf-8" 
endif

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