全键盘工作流新利器——kitty
以下单独提到的所有“终端”均为“终端模拟器”的简称。
大约两年前就有人向我安利过kitty,但当时我正在使用wezterm,并没有更换的想法,正好最近我使用的nix打包的wezterm出了点小问题,于是决定来试试这款据称非常强大的终端模拟器。本文就来简单介绍下这个工具,并适当和wezterm做一些对比。
基本功能
配置
kitty有很高的可以配置性,用户可以按需要定制快捷键和UI,并且它是通过文本文件来配置的,意味着配置可以通过网络分享,在异地重现。wezterm也是通过文本文件配置,不同的是,kitty使用自定义的文本conf
格式,而wezterm使用图灵完备的lua
语言配置。
多字体
在终端上我最多的使用场景是使用Vim编辑文本,常常会遇到多语言文本混合的情况,我希望能为不同语言的字符使用不同的字体(通常一个单独的字体也往往不能包罗万象,如果终端只能设置一个字体将会导致乱码)。wezterm对此提供了很好的支持,用户可以提供多个字体做为fallback,如果字体中不包含要渲染的字符,就从fallback列表里往下查找:
kitty也支持类似的功能,但配置起来要麻烦点。首先可以设置一个字体家族做主要字体,然后通过symbol_map
配置将部分unicode映射到其它字体上,例如symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols
。这里列出我使用的配置:
窗口拆分、Tabs
我喜欢终端应该自带窗口拆分、多tabs切换功能,幸好kitty和wezterm都支持这两个功能。值得一提的是,kitty把一个Tab内水平/垂直的切分,称为Window
(wezterm中是Pane
),为了区分,将桌面系统的窗口称为OS window
。
通过与shell、ssh等工具的集成,kitty还可以做到多开tab/窗口的同时复用session。例如当前已经通过kitty的ssh扩展连接到远端机器,再通过快捷键新建tab,可以无需再次ssh验证,直接开启一个远程会话。
高级扩展
kitty使用C语言来编写高性能要求的部分,同时又支持使用Python语言编写插件来提供拓展。kitty中把这种插件叫做kittens
,对应的,有一个叫做kitten
的命令行工具来调用这些扩展,而在快捷键配置里,又可以映射快捷键到kitten的调用上,非常灵活且强大。这里介绍几个官方自带的kittens。
icat
这个工具可以在终端中显示图片,使用命令kitten icat <image file name>
可以调用。这个功能可以很轻易地与其他应用集成,例如终端文件管理器。
ssh
前面提到在多窗口、多tabs中可以复用ssh connections,就需要这个kitten的支持。wezterm也支持这个功能,只是wezterm没有插件系统,这个功能是内置的。
hints
在Vim中用过easymotion类插件的朋友应该会觉得这个功能很亲切,这个kitten支持快速检索出当前窗口中的URL文本,在文本上标出序号,通过按下对应的数字键快速打开对应的URL。
不止于此,这个插件也可以和Vim集成,通过快捷键快速打开文件并编辑。