0

在红宝石文件中:

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。

4

1 回答 1

2

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

:set fileencoding会告诉你 Vim 决定为你的文档使用什么编码。可能的值由fileencodings选项给出。ASCII 不是默认列表的一部分,因为它通常由列出的其他编码透明地处理。

但是你问题的那一部分让我感到困惑:

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

因为看起来您希望该文件被解释器视为 ASCII。

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

简而言之,无论你的文件是否真的用 ASCII 编码,Vim 都不在乎。

那么……你到底想要什么?fileencoding当您打开一个所谓的 ASCII 文件时,该 vim 将其选项设置为 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 的子集。

因此,在我们继续之前,请验证:

  • 文件的编码类似于$ file /path/to/file

  • fileencodingVim 用于该文件:set fileencoding

于 2013-01-24T20:23:19.433 回答