Answers:
当Vim读取现有文件时,它将尝试检测文件编码。写入文件时,Vim使用检测到的文件编码(除非您以不同的方式告诉它)。因此,将检测为UTF-8的文件写为UTF-8,将检测为Latin-1的文件写为Latin-1,依此类推。
默认情况下,检测过程是原始的。用Vim打开的每个文件都将假定为Latin-1,除非它在顶部检测到Unicode字节顺序标记。没有字节顺序标记的UTF-8文件将很难编辑,因为任何多字节字符将在缓冲区中显示为字符序列而不是单个字符。
更糟糕的是,Vim默认情况下使用Latin-1表示缓冲区中的文本。因此,具有字节顺序标记的UTF-8文件将通过向下转换为Latin-1损坏。
解决方案是将Vim配置为在内部使用UTF-8。实际上,这是Vim文档中所建议的,并且不进行开箱即用的配置的唯一原因是,避免在希望Vim基本充当Latin-1编辑器的用户之间造成巨大的混乱。
在您的中.vimrc
,添加set encoding=utf-8
并重新启动Vim。
或者,设置
LANG
环境变量以指示UTF-8是您首选的字符编码。这不仅会影响Vim,还会影响依赖于LANG
它确定文本表示方式的任何软件。例如,要指示文本应以en
美国(US
)中的英语()出现,并以UTF-8(utf-8
)编码,请设置LANG=en_US.utf-8
。
现在,Vim将使用UTF-8表示缓冲区中的文本。另外,它还将更加确定地检测文件中的UTF-8编码。除了寻找字节顺序标记外,它还会在不返回拉丁1之前检查没有字节顺序标记的UTF-8。因此,它将不再损坏以UTF-8编码的文件,并且在编辑会话期间应正确显示UTF-8字符。
有关Vim如何检测文件编码的更多信息,请参见Vim文档中的
fileencodings
选项。
有关设置Vim的内部使用编码的更多信息,请参阅该encoding
选项。
如果你需要覆盖写入文件时回磁盘使用的编码,看到的fileencoding
选项。
.vimrc
。实际上,编码的默认值为“ latin1”或$ LANG中的值,在我的系统上该值设置为en_US.UTF-8
。因此:set encoding
,encoding=utf-8
开箱即用。如预期的那样,如果LANG未设置,则:set encoding
给出encoding=latin1
。感谢您的出色回答!