gpt4 book ai didi

vim - 终端编码在 vim 中如何工作?

转载 作者:行者123 更新时间:2023-12-04 23:45:11 25 4
gpt4 key购买 nike

在 GNOME 终端中(3.4.1.1)

$ echo $LANG
en_US.UTF-8

$ echo 你好 | iconv -f UTF8 -t UTF32BE | tee hello.txt
O`Y}

在 vim(7.3) 中:

$ vim -N -u NONE --cmd 'set tenc=utf32 enc=utf32 fencs=utf32be' hello.txt
你好
~
~
~

:set tenc enc fenc
termencoding=ucs-4
encoding=ucs-4
fileencoding=ucs-4

终端无法显示UTF32字符。
修改了Vim的几个编码选项后。
Vim 仍然可以毫无问题地显示 UTF32
为什么?

最佳答案

很有趣。您可以在 script 中运行命令验证 Vim 是否确实将 UTF-8 写入您的终端。

'charconvert' 的帮助和 'encoding'给出关于内部操作的倾斜提示,但我没有找到相应的提示,表明同样的行为适用于 termencoding。分别是:

Vim internally uses UTF-8 instead of UCS-2 or UCS-4.

When "unicode", "ucs-2" or "ucs-4" is used, Vim internally uses utf-8.

因此,我们将使用 source (特别是版本 7.3.548)以了解发生了什么。

termencoding/tenc 选项的值为 stored在全局变量中 p_tenc .

  • did_set_string_option()似乎处理字符串值选项的设置。

    • handling termencoding , 它调用 convert_setup()设置 output_conv(用于将 encoding 转换为 termencoding)。

      convert_setup 的注释给出了关于正在发生的事情的第一个提示:

      Note: cannot be used for conversion from/to ucs-2 and ucs-4 (will use utf-8 instead).

      • convert_setup calls convert_setup_ext() {from,to_unicode_is_utf8 参数均为 TRUE。

        • 当 {from,to}_unicode_is_utf8 为真时(它们是),它设置局部变量 {from,to_is_utf8 基于指定的编码是否具有 ENC_UNICODE 属性 ( ucs-4 does , Vim 的所有 utf-...ucs-… 编码)。
          到时候 open an iconv , Vim 替换 utf-8 如果 {from,to}_is_utf8 为真(在这种情况下,它们是).

最终,encodingtermencoding 的值在这里以相同的方式处理。 utf-32 is mapped to ucs-4 , 它有 ENC_UNICODE,Vim 用 UTF-8 替换所需的编码。也许在提交日志中有一些提示表明为什么 termencoding 被这样对待;不过,我会将考古学留给其他人。

处理fileencoding的代码路径不同。它仅在转换的“内部”强制使用 UTF-8(并且仅当“Unicode”编码 有效时)。

关于vim - 终端编码在 vim 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com