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

时间:2009-06-17 10:42:16

标签: vim

我注意到大多数情况下,当使用“标准英语”以外的某些编码时,vim无法识别并且无法正确显示字符。
通过使用cp437代码页打开网上的一些ascii图形或类似文件,可以很容易地看到这一点。

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

您使用哪种编码作为最“便携”的编码(最大用户最不会遇到问题的编码)?

4 个答案:

答案 0 :(得分:20)

Vim需要检测编码,这会有问题,因为文件通常不会明确说明其编码(一个明显的例外是标题中带有编码属性的XML文件)。

您可以强制Vim重新加载具有不同编码的文件:

:e ++enc=cp437

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

This page有更多信息和链接,尤其是wrt。编辑Unicode。 UTF-8是使用最广泛的编码,你应该可以使用它。

答案 1 :(得分:3)

您可以使用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

答案 2 :(得分:1)

您可以在.vimrc中设置变量'fileencodings'。

这是开始编辑时考虑的字符编码列表 现有文件。读取文件时,Vim尝试使用第一个文件。 提到的字符编码。如果检测到错误,则下一个错误 在列表中尝试。找到有效的编码后, 'fileencoding'被设置为它。如果全部失败,则将“ fileencoding”设置为 一个空字符串,表示已使用“ encoding”的值。

请参见library(lme4) #> Loading required package: Matrix library(insight) sleepstudy$Days1 <- 1 + sleepstudy$Days fm <- lmer(Reaction ~ scale(log(Days1)) + (1|Subject), sleepstudy) colnames(model.frame(fm)) #> [1] "Reaction" "scale(log(Days1))" "Subject" clean_names(colnames(model.frame(fm))) #> [1] "Reaction" "log" "Subject"

如果您经常与例如cp437或cp1252,您可以在此处添加它:

:help filencodings

答案 3 :(得分:0)

您可以使用unicode对文件进行编码,并在文件中设置Byte Order Mark(BOM)。这将使vim适当地对待它,但是一些编译器和程序可能会遇到问题。即使像cat这样的基本shell命令也可能在某些用例中行为不端。

要做到这一点,请在vim中输入:

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

有关详细信息,请键入:

:help bomb