如何将 VIM 的默认编码设置为 UTF-8?

Pao*_*olo 65 vim character-encoding unicode

我想为一个提供翻译字符串的开源项目做出贡献。他们的要求之一是贡献者必须使用 UTF-8 作为 PO 文件的编码。

我在 Linux 上使用 VIM 7.3。我如何确定 VIM 的编码设置为 UTF-8,以便我可以以正确的方式编辑和保存 .po 文件?

Met*_*aEd 73

当 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 编码。除了查找字节顺序标记之外,它还将在回退到 Latin-1 之前检查没有字节顺序标记的 UTF-8。因此,它不会再破坏以 UTF-8 编码的文件,并且应该在编辑会话期间正确显示 UTF-8 字符。

有关 Vim 如何检测文件编码的更多信息,请参阅Vim 文档中fileencodings选项

有关设置Vim的内部使用编码的更多信息,请参阅encoding 选项

如果你需要重写编写一个文件恢复到磁盘时使用的编码,看到fileencoding 选项


Mr *_*unz 5

根据vimdoc, vim 尝试自动检测文件编码,因此如果您正在编辑现有文件,那么您应该会很好。

如果需要,您可以随时强制编码:set fileencodings=utf-8。您可以在此处找到文档。

  • fileencodings=utf-8 将导致 Vim 将输入文件识别为 UTF-8,然后执行到 Latin-1 的有损转换。此外,它会导致 Vim 无法识别 UTF-16。更好的解决方案是设置 encoding=utf-8,这将 Vim 从原生的单字节编辑器变成原生的多字节编辑器。 (6认同)