终端状态 | g.p. anders

这是一篇 2023 年 Neovimconf 大会演讲的配套文章。作者使用 Vim/Neovim 作为全职文本编辑器近 10 年,深知终端平台的缺陷和特性,也认为其有很多优点,且基于终端的工具仍很受欢迎。

背景与历史:如今多数终端模拟器可追溯到 DEC VT100,它是当时最流行的视频终端,创建了后续的标准。视频终端改进了电传打字机,不同终端有独特的转义码,后来有了正式标准,如 ECMA-48 和 ANSI X3.64,DEC VT100 支持新标使其流行,Xterm 则是软件终端模拟器的开端。

终端模拟器基础:终端应用向终端模拟器写入可打印文本和控制码,控制码多为单字节或以转义字符开头的序列。常见控制码如\r\n,转义序列分为 CSI、DCS 和 OSC 三类,Xterm 维护其支持的控制序列列表。使用转义序列很简单,如printf '\e[1;32mHello \e[0;4;31mworld!\n\e[0m'可设置文本格式。

问题与解决方案

  • 键编码:终端通过字节流通信,修饰键使情况复杂,Ctrl修饰键问题更大,曾有多种解决办法,如 Xterm 的modifyOtherKeys选项、libvterm作者的CSI u编码及 kitty 终端模拟器的键盘协议,这些方案将按键编码为转义序列,消除了修饰键的歧义,且被许多终端模拟器和应用采用。
  • 装饰:Xterm 自 1999 年起支持 256 种用户指定颜色,近十年 24 位真彩色广泛支持,终端还支持其他丰富文本标记,如删除线和下划线,也可在终端内显示图像和视频,但支持情况不一,终端 UI 的进步得益于终端模拟器和应用作者的努力。
  • 能力确定:终端模拟器支持的功能不同,主要通过terminfo文件数据库确定,但此数据库存在问题,如不同操作系统和发行版的 ncurses 版本不同,新终端未加入数据库等,许多终端使用xterm-256color作为$TERM值,导致恶性循环。如今多数应用可假设常见转义序列能正常工作,终端模拟器也支持应用查询功能支持,一些新的 TUI 库避免使用terminfo
  • 系统集成:现代终端模拟器支持多种与环境交互的转义序列,如设置窗口标题、创建超链接、发送桌面通知和与系统剪贴板交互等。Vim 在远程会话中处理剪贴板管理有问题,Neovim 即将添加对 OSC 52 的支持。

结论:终端虽有特性,但因其便携、普遍和易用性,在面对众多替代品时仍很受欢迎。文章未涵盖所有终端相关问题,终端模拟器在不断进化创新,其底层技术虽古老但也是优势,能保证平台持久存在。

参考文献与进一步阅读:列举了多篇关于终端相关主题的文章。

阅读 19
0 条评论