我注意到大多数情况下,当使用“标准英语”以外的某些编码时,vim无法识别并且无法正确显示字符。
通过使用cp437代码页打开网上的一些ascii图形或类似文件,可以很容易地看到这一点。
有没有办法在打开文件时让vim检查编码,并用正确的文件打开它?
您使用哪种编码作为最“便携”的编码(最大用户最不会遇到问题的编码)?
答案 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