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

jgwigjjp  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(201)

我注意到,大多数时候,当使用“标准英语”以外的一些编码时,vim不能正确识别和显示字符。
这是最容易看到打开一些ascii图形,或类似的文件关闭网络,其中使用cp437代码页。
有没有办法让vim在打开文件时检查编码,并用正确的编码打开它?
你使用什么编码,作为最“可移植”的(最多的用户将有最少的问题)?

pcww981p

pcww981p1#

Vim需要检测编码,这将是一个问题,因为文件通常不会显式地声明它们的编码(一个明显的例外是标头中带有编码属性的XML文件)。
您可以强制Vim重新加载一个具有不同编码的文件,例如:

:e ++enc=cp437

并且如果需要,您可以在.vimrc中设置默认编码。
这个页面有更多的信息和链接,特别是wrt. editing Unicode。UTF-8是最广泛使用的编码,也是你应该使用的默认编码。

db2dz4w8

db2dz4w82#

你可以使用一个vim modeline来设置文件的编码,这只是一个注解,在文件的前五行中,以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

zte4gxcn

zte4gxcn3#

您可以在. vimrc中设置变量“fileencodings”。
这是一个字符编码列表,在开始编辑一个已有文件时,Vim会尝试使用第一个提到的字符编码。如果检测到错误,则会尝试列表中的下一个。如果找到一个有效的编码,则会将'fileencoding'设置为该编码。如果所有编码都无效,则会将'fileencoding'设置为空字符串,这意味着使用'encoding'的值。
请参阅:help filencodings
如果您经常使用cp437或cp1252,则可以在此处添加:

set fileencodings=ucs-bom,utf-8,cp1252,default,latin9
wfveoks0

wfveoks04#

你可以使用unicode对文件进行编码,并在文件中设置一个Byte Order Mark(BOM)。这将使vim正确地处理它,但一些编译器和程序可能会遇到麻烦。甚至像cat这样的基本shell命令在某些情况下也可能会出现错误。
为此,请在vim中键入以下内容:

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

如需详细信息,请键入:

:help bomb
6ioyuze2

6ioyuze25#

在.vimrc的末尾添加:(如果需要,可以用“latin 1”替换“utf-8”)

if len(&fenc) == 0
  silent! exe "e! ++enc=utf-8" 
endif

相关问题