Windows Terminal 试用小记

为了对水果近年来在 T2 问题上的倒行逆施表示反抗,我最近开始研究 Windows 下工作的可能性,由于 WSL 的完成度日渐提高,我使用 macOS 工作的最大理由已经消失,不过由于 conemu 等第三方终端总是感觉性能不好,刷新率和响应速度都和 iTerm 有肉眼可见的差距,在 Windows 下工作总觉得手感差点。不过 Windows Terminal 于近日宣布 feature complete,距离预定于明年初发布的 v1.0 只剩下 bug fix 工作,感觉是时候尝试一下,于是我老人家终于下定决心花了一晚上时间把我的 LTSC 系统升级到半年频道(Windows Terminal 使用了 conhost 的一些新 API,要求系统版本在 1903 build 18362 以上)

但是和 VS Code 发布之初类似,Windows Terminal 现在也只有 json 格式配置文件,没有 GUI 配置,不得不说这个还是挺劝退的,目前 WT 的文档非常的不齐全,组织的还比较混乱, 还全部直接扔在 Github 源码里,Github 本身不是一个便于阅读文档的地方,翻文档就很累,虽然微软提供了一个完整的 config sample ,但是由于太长了人类可读性也不是很好,有时候找半天不如直接 Google 搜关键词最后从某 issue 的角落里抄来一句能用的配置,个人还是很烦这种不得要领又无序可循的感觉,这也是我写本文的一个原因。

个人建议可以先通读配置项:https://github.com/microsoft/terminal/blob/master/doc/cascadia/SettingsSchema.md
,但是这个配置清单列出的也是不完整的,比如我要找的
splitVertical 就没列在里面,可能没更新,https://github.com/microsoft/terminal/blob/master/src/cascadia/TerminalApp/AppKeyBindingsSerialization.cpp 完整的可以直接看代码。

Windows terminal 配置格式的几个主要概念:

  • Global settings & Profiles,Windows terminal 的配置是分层的,类似于 OOP 的继承关系,每个 profile 可以覆盖上层的配置,每个 profile 一般对应一种 shell,用一个 UUID 标识
  • Key Bindings,热键 / 快捷键,又分为 command 执行代码里预定义的动作,和 sendInput 修改按键映射两种
  • Color Schemes 或者叫 Schemes 是一组颜色的方案,用一个 json 数组定义,格式参见 Editing Windows Terminal JSON Settings – color schemes,可以单独对里面的项目进行覆盖,也可以直接应用 scheme 整体方案。

目前我使用的配置贴在:https://gist.github.com/StarDuster/9d53408eeb57bb22365f41bbe0f0a953

其中几个个人认为比较重要的设置:

  • 默认 shell,新建 tab 时默认打开的 shell,defaultProfile 指定 UUID 即可
  • 分屏热键:包括splitVerticalsplitHorizontal,和在 pane 之间移动焦点的 moveFocus[Up|Down|Left|Right]
  • tab 管理热键:新建和关闭对应newTabclosePane,严格来说closePane不是关闭 tab 而是关闭一个分屏窗格,closeTab才是关闭整个 tab
  • 全局呼出热键(Quake-Mode):iTerm 和 conemu 都支持的一个很好用的功能,在任意时候按下即可呼出终端窗口,重复一次即最小化,然而 WT 目前不支持类似功能,因此 GitHub 上有相关轮子 https://github.com/dotjosh/WinTermPlus
  • 复制粘贴相关配置和冲突的热键修改映射:默认情况下,WT 选中文字后右键是复制,再次右键是粘贴(但是粘贴多行没有警告,容易误操作,需要小心使用),因此我还是配置了 Ctrl+V 粘贴,另外将 Ctrl+Shift+V 使用 sendInput 映射为 Ctrl+V,避免 vim 的 visual block 功能失效

一些相对不那么重要的杂项:

  • 分词:双击自动选中是 iterm/conemu 中常用功能,WT 的默认分词策略有一点小问题,会导致双击 IP、Unix 文件路径等时候都不能正确的选中完整文字,需要修改wordDelimiters,去掉 /.
  • 最大保留历史输出:historySize 默认保留 9000 行,太少,一不小心就滚没了,然而加太大又会遇到 https://github.com/microsoft/terminal/issues/1465 的 bug,结论是目前最大支持的值大约在32K也就是32768左右,和当前终端显示行数有关系,因此实际没有 bug 的配置值略小于32768,闲的没事可以和我一样自己测出来,不想折腾写32000左右都可以。
  • 配色和半透明:关于配色的调整,微软虽然有个官方工具还放在了 Windows terminal 的 repo 里,ColorTool 但是很遗憾这个东西实际上一点卵用也没有,只支持 cmd.exe 和 powershell,不支持 Windows terminal,我完全不理解微软为什么要把这个工具放在同一个 repo 里,http://terminal.sexy 导出的 json 格式 windows terminal 暂时也不支持,所以我暂时没有找到什么好的直接应用 iTerm 配色的方法,默认配置理论上在:https://github.com/microsoft/terminal/tree/master/src/tools/ColorTool/schemes,直接在配置中指定 "colorScheme": "Solarized Dark" 是可以的。

一个彩蛋:

由于 WT 的默认 profile 里有一个 Azure cloud shell 的选项,就顺带看了看这是个 什么东西,一句话总结就是一个随用随开的、带网络连接的、无 root 的 Linux shell,附带 python、node、vim、git、mysql 等常用开发工具,甚至有 kubectl、docker-machine 和 terraform、ansible 等云原生工具,挺有意思的,不过在有 WSL 的情况下这东西有多大意义暂时还要打个问号(可能 cloudshell 出现比 WSL 要早)

一些碎碎念:

目前使用下来的感觉,WT 的流畅度、字体渲染效果远胜于其他第三方终端,但是目前的配置真的挺难用的,虽然微软这两年在很努力的改善 Windows 下开发者的日常使用体验,但是 WSL 也好 WT 也好,总是有类似一些比较大的硬伤(WSL 的 IO 性能和 socket 问题,WT 的配置管理等),VSC 在用了几年时间后日趋完善并成为目前最好用的跨平台编辑器,我期待着 WSL 和 WT 开发成熟并真正能替代 Linux/Mac 进行开发的那天。


本文链接: https://www.starduster.me/2019/12/29/try-out-windows-terminal/
本站允许也欢迎您:自由地对本文进行复制、分享或基于本文进行创作
但您需同意并遵守:对本文署名并标记来源、使用相同方式共享、不将其用于商业用途
更严谨和完整的声明请参见关于本站内容许可

一条评论


  1. UPDATE:4月更新中微软修复了中文字体 fallback 的问题,中文显示更正常,但是 SB 微软删掉了一部分 legacy 代码导致 包括 splitVertical 、 splitHorizontal 、moveFocus[Up|Down|Left|Right] 等配置项失效,需要用他新的配置格式

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据