虽然Vim的帮助是信息的宝藏洞穴,但在某些情况下我发现它令人难以置信。它对不同编码相关选项的解释就是这种情况。
有人可以用简单的语言向我解释编码,fileencoding和fileencodings 设置做了什么,以及我该如何处理
a)查看当前文件的编码?
b)更改当前文件的编码?
c)做一些经常使用的其他东西,但现在却放下了我的想法?
答案 0 :(得分:26)
encoding
来了解它支持的字符集以及字符在内部的存储方式。
您不应该真正修改此设置;它应默认为Unicodeish。否则,您无法读取和写入具有扩展字符集的文件
如果您不确定,请将:set encoding=utf-8
放在vimrc
的开头,并且再也不要再使用该设置,除非您必须使用1字节编码读取一个会话的大文件。
fileencoding
存储当前缓冲区的编码
您可以读取和写入此变量,它会执行您想要的操作
当您修改它时,该文件将被标记为已修改,当您将其保存(:w
或:up
)到磁盘时,它将使用您指定的编码进行编写。
fileencodings
告诉Vim如何检测您读取的每个文件的编码(以确定fileencoding
的值)。它是按顺序尝试的编码列表,并且假定与文件的二进制内容一致的第一个编码是您正在读取的文件的编码。
设置一次,然后忘记它。如果您知道要打开大量文件并且它们都使用相同的编码,您可能需要更改它,并且您不想要浪费时间试图检查其他编码。如果你在西欧,默认值ucs-bom,utf8,latin1
是很好的IMO,因为几乎所有文件都将以正确的编码打开。但是使用此设置时,当您打开纯ASCII文件时(即,UTF8和任何基于拉丁语的代码页编码中的字节表示相同),该文件将被假定为UTF8,并保存为原样。
示例:如果您将fileencodings
设置为latin1,utf8
,则您打开的每个文件都将被读取为latin1
,因为尝试读取带有latin1编码的文件永远不会失败:256之间存在双射可能的字节值和字符集中的单个字符
相反,如果您尝试fileencodings=ucs-bom,utf8,latin1
,Vim将首先检查字节顺序标记并使用BOM解码Unicode文件,然后如果失败(无BOM)尝试以UTF-8读取文件,如果失败(因为UTF8中的某些字节序列无效,请在latin1
中打开您的文件。
为了使用正确的编码重新加载文件(fileencodings
无法正常工作的情况),您可以执行以下操作::e! ++enc=<the_encoding>
。
TL; DR:
:echo &fileencoding
(更短::echo &fenc
或:set fenc?
或:verb set fenc?
):set fenc=…
...然后根据需要多次调用:w
。:e! ++enc=…
答案 1 :(得分:5)
<强>编码强>
内部代表。查看或设置:
trigger
<强> fileencoding:强>
写入文件时将使用的表示形式。查看或设置:
:set encoding
:set encoding = utf-8
<强> fileencodings:强>
读取文件时测试的可能编码列表。查看或设置:
:set fileencoding
:set fileencoding = utf-8
以下是vim文档(mbyte-encoding)
中可能的编码列表:set fileencodings
:set fileencodings= utf-8,latin-1,cp1251