如何在 vim 中找到当前缓冲区的编码?

如何在 vim 中找到当前缓冲区的编码?

假设我正在使用 vim(或 gvim)编辑某个文件。我不知道该文件的编码,我想知道它是 UTF-8 还是 ISO-8859-1 还是其他什么?我能以某种方式告诉 vim 显示它使用的是什么编码吗?

答案1

fileencoding 设置显示当前缓冲区的编码:

:set fileencoding
fileencoding=utf8

实际上,没有一种常用的方法来确定纯文本文件的编码,因为该信息不保存在文件本身中 - 除了 UTF-8 文件,其中有一个所谓的 BOM 来指示编码。这就是 xml 和 html 文件具有字符集元标记的原因。

您可以使用“encoding”设置强制执行特定编码。请参阅Vim 中的:help encoding:help fileencoding了解编辑器如何处理这些设置。您还可以将几个文件编码设置添加到 vimrc 中,让 vim 尝试根据列出的设置进行检测。

答案2

请注意文件的编码是没有明确说明文件中的任意位置。因此,VIM 和其他应用程序必须猜测编码。执行此操作的规范方法是使用chardet应用程序,它可以在 VIM 中运行,如下所示:

:!chardet %

jtimberman 提供的答案向您展示了当前缓冲区它可能与磁盘上的文件编码不同。因此,您会注意到chardet有时会显示与 VIM 不同的编码,特别是如果您将 VIM 配置为始终使用特定编码(即 UTF-8)。

其优点在于chardet,它给出了猜测的置信度分数,而如果 \x7F(ASCII 127)以上字符不多,VIM 可能会(并且经常)猜错编码。例如,在א一个很长的 PHP 代码文件中添加一个单字符,会chardet认为该文件的ISO-8859-2置信度为 0.72,而添加稍长的短语שלום, עולם!‏会给出 UTF-8 的置信度分数为 0.99。在这两种情况下,set fileencoding?显示UTF-8不是因为磁盘上的文件是 UTF-8,而是因为 VIM 配置为在内部使用 UTF-8。

答案3

我找到 :https://vim.fandom.com/wiki/Reloading_a_file_using_a_different_encoding

如果 Vim 无法检测到正确的编码,你可以使用不同的编码重新加载文件

:e ++enc=<encoding>

哪里encoding可能cp850, ISO-8859-1, UTF-8, ...

您可以使用file yourfilename来查找编码或chardetect(由您的 Linux 发行版提供python-chardetuchardet取决于您的 Linux 发行版),如 dotancohen 所建议的那样。

相关内容