【问题标题】:Is it possible to automatically set UTF16 file encoding when opening a file of that type?打开该类型的文件时是否可以自动设置 UTF16 文件编码?
【发布时间】:2012-10-19 08:38:48
【问题描述】:

我用 Vim 编辑各种文件(我相信大多数 Vim 用户都会这样做)。我遇到的一个问题是当我遇到一个具有奇怪编码的文件时,Vim 会做什么。大多数编辑器(这些天)在检测文件编码方面做得很好。但是,Vim 通常不会。你必须输入,例如:

:e ++enc=utf-16le

用 UTF-16 重新读取文件(否则你会得到大量的@符号)

我一直在四处寻找并看到像set_utf8.vim 这样的脚本,它可以检测特定的文件编码。但是,是否有更通用的解决方案?每次打开不寻常的文件时,我都不得不手动计算文件编码并咨询帮助,这让我有点无聊。

【问题讨论】:

    标签: vim


    【解决方案1】:

    将编码名称添加到'fileencodings' 应该可以解决问题:

    :set fencs=ucs-bom,utf-16le,utf-8,default,latin1
    

    另外,还有像AutoFencfencview 这样的插件。

    【讨论】:

    • +1 这些看起来非常有用,虽然很遗憾不适用于我的 BOMless UTF16 日志文件,嗯,我只会为这些文件添加一个特定的 AutoFileCmd...不过谢谢!
    • 在 Mac OSX Catalina 上,使用“VIM - Vi IMproved 8.1 macOS version”添加这会导致所有 UTF-8 文件以 UTF-16 LE 格式打开
    【解决方案2】:

    将此代码添加到您的 .vimrc

    if has("multi_byte")
      if &termencoding == ""
        let &termencoding = &encoding
      endif
      set encoding=utf-8
      setglobal fileencoding=utf-8
      "setglobal bomb
      set fileencodings=ucs-bom,utf-8,latin1
    endif
    

    【讨论】:

    • 这很好用。唉,我正在处理由 VS2017 创建的 Windows c# 文件以及来自 Linux 的普通文本文件和 python。 Vim 打开每个文件都是正确的。
    【解决方案3】:

    你有字节顺序标记吗? Vim 应该检测到这一点并正常工作。来自the doc - section 45.4

    当你开始编辑那个 16 位 Unicode 文件并且它有一个 BOM 时,Vim 将检测到这一点并在读取文件时将文件转换为 utf-8。这 'fileencoding' 选项(末尾不带 s)设置为检测到 价值。在这种情况下,它是“utf-16le”。这意味着它是Unicode, 16 位和小端。这种文件格式在 MS-Windows 上很常见 (例如,对于注册表文件)。

    【讨论】:

    • 嗯,这个特定的文件没有 BOM(这在 Windows 上很奇怪),但很高兴知道这适用于具有 BOM 的文件...
    • 这对我不起作用。 Gvim 在 Windows 上,文件 >xxd .\utf16.txt 00000000: fffe 4100 4200 a300 2400 ac20 6300 6400 ..A.B...$.. c.d. 00000010: 6500 0d00 0a00 e.....当我执行“gvim utf16.txt”时,我看到ÿþA^@B^@£^@$^@¬ c^@d^@e^@^M^@...(抱歉格式化,不知道如何在评论中进行预格式化文本...)
    猜你喜欢
    • 1970-01-01
    • 2021-02-02
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多