我不明白为什么VIM中有encoding
和fileencoding
。
据我所知,文件就像一个字节数组。当我们创建文本文件时,我们创建一个字符(或符号)数组,并将此字符数组编码为 X 到一个字节数组,并将字节数组保存到磁盘。在文本编辑器中读取时,它使用编码 X 解码字节数组以重建原始字符数组,并根据字体显示每个字符的图形。在此过程中,仅涉及一个编码。
VIM set encoding and fileencoding utf-8,wiki of VIM about working with unicode,
编码设置 vim如何在内部表示字符。 UTF-8 对于大多数Unicode来说是必要的。
fileencoding设置特定文件的编码(local to local) 缓冲液)
“ vim如何在内部表示字符”vs“特定文件的编码”...转发Unicode与UTF-8?如果是这样,为什么用户会打扰前者?
任何提示?
答案 0 :(得分:6)
你是对的;大多数程序都有固定的内部编码(说到C数据类型,即char
,它们大多使用基础语言环境,可能无法表示所有字符,或UTF-8;或wchar
(宽字符),可以代表Unicode范围)。选择主要由编程语言和可用的API驱动(因为必须来回转换是乏味且无效的。)
Vim,因为它支持各种各样的平台(从开始开发的旧Amiga开始),面向程序员,高级用户允许配置内部表示。
'fileencodings'
识别编码,或明确指定。'encoding'
。使用utf-8
,您可以放心使用。'termencoding'
。正如您所看到的,虽然它可能让初学者感到困惑,但实际上您拥有所有可用的力量!
答案 1 :(得分:5)
我会以这样的方式说明我不是一个vim专家。
我认为你的想法存在缺陷:
在文本编辑器中读取时,它使用编码X解码字节数组以重建原始字符数组,并根据字体显示每个字符的图形。
问题是,vim不负责在这里渲染字形。 vim从文件中读取字节,在内部存储它们,将字节发送到终端,使用字体呈现字形。 vim本身从不触及字体,因此永远不需要理解“字符”。它只需要在内部使用字节,它在文件,内部缓冲区和终端之间来回移动。
因此,涉及三种可能的不同字节存储:
vim将根据需要进行转换。它可以从Shift-JIS编码文件中读取,将数据内部存储为UTF-16,并以UTF-8发送/接收来自终端的I / O.我不确定为什么你想要改变vim的内部字节处理(再次,不是专家),但无论如何,如果你愿意,你可以改变那个设置。
假设如下:如果将encoding
设置为Unicode编码,则可以安全地处理您可能遇到的任何可能的角色。但是,在某些情况下,这些Unicode编码可能太大而无法在非常有限的系统中轻松适应内存,因此在这种情况下,如果您知道自己在做什么,则可能需要使用更专业的编码。