为什么我的vim编码和ruby编码不一致?

时间:2013-01-24 17:08:01

标签: ruby vim encoding

在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。

1 个答案:

答案 0 :(得分:2)

正如@melpomene所评论的,:set encoding告诉你Vim在内部使用了什么编码。

:set fileencoding将告诉您Vim决定使用哪种编码方式。可能的值由fileencodings选项给出。 ASCII不是默认列表的一部分,因为它通常由列出的其他编码透明地处理。

但你的那部分问题令我感到困惑:

  

但我仍然不明白为什么文件是ASCII

因为看起来你主动希望解释器将该文件视为ASCII。

无论如何,该编码指令仅由Ruby使用:它并不意味着文件实际编码为ASCII或者Vim应该关心它并以特殊方式处理它

简而言之,无论您的文件是否实际用ASCII编码,Vim都不关心。

那么......你想要什么?当你打开一个所谓的ASCII文件时,vim将其fileencoding选项设置为ASCII?你所谓的ASCII文件转换为另一种编码?

修改

  1. 使用该指令,您明确告诉Ruby该文件的内容必须被视为ASCII,Ruby说“好的,如果您这样说,那就是ASCII。”。

  2. 此指令不会将任何更改为文件的实际编码。它可能是utf-8,latin1或其他什么。

  3. Vim不理解该指令。

  4. Vim根据您应在:h encoding:h fileencoding:h fileencodings中阅读的一些规则选择用于该文件的编码。

  5. Vim不会以特殊的“ASCII”方式处理ASCII,它只是处理它具有utf-8的子集。

  6. 所以,在我们进一步讨论之前,请确认:

    • 使用类似$ file /path/to/file

    • 的文件编码
    • fileencoding Vim使用该文件:set fileencoding