在ruby文件中:
p __ENCODING__
#<Encoding:US-ASCII>
在vim中:
set encoding?
encoding=utf-8
这让我感到悲伤(http://stackoverflow.com/questions/14495486/ruby-syntax-error-with-multiple-language-in-hash),这是修补但我仍然不明白为什么文件由ruby显示为ASCII,vim显示为utf-8。
答案 0 :(得分:2)
正如@melpomene所评论的,:set encoding
告诉你Vim在内部使用了什么编码。
:set fileencoding
将告诉您Vim决定使用哪种编码方式。可能的值由fileencodings
选项给出。 ASCII不是默认列表的一部分,因为它通常由列出的其他编码透明地处理。
但你的那部分问题令我感到困惑:
但我仍然不明白为什么文件是ASCII
因为看起来你主动希望解释器将该文件视为ASCII。
无论如何,该编码指令仅由Ruby使用:它并不意味着文件实际编码为ASCII或者Vim应该关心它并以特殊方式处理它
简而言之,无论您的文件是否实际用ASCII编码,Vim都不关心。
那么......你想要什么?当你打开一个所谓的ASCII文件时,vim将其fileencoding
选项设置为ASCII?你所谓的ASCII文件转换为另一种编码?
修改强> 的
使用该指令,您明确告诉Ruby该文件的内容必须被视为ASCII,Ruby说“好的,如果您这样说,那就是ASCII。”。
此指令不会将任何更改为文件的实际编码。它可能是utf-8,latin1或其他什么。
Vim不理解该指令。
Vim根据您应在:h encoding
,:h fileencoding
和:h fileencodings
中阅读的一些规则选择用于该文件的编码。
Vim不会以特殊的“ASCII”方式处理ASCII,它只是处理它具有utf-8的子集。
所以,在我们进一步讨论之前,请确认:
使用类似$ file /path/to/file
fileencoding
Vim使用该文件:set fileencoding