全键盘工作流新利器——kitty

创建于:发布于:文集:百宝箱

以下单独提到的所有“终端”均为“终端模拟器”的简称。

大约两年前就有人向我安利过kitty,但当时我正在使用wezterm,并没有更换的想法,正好最近我使用的nix打包的wezterm出了点小问题,于是决定来试试这款据称非常强大的终端模拟器。本文就来简单介绍下这个工具,并适当和wezterm做一些对比。

基本功能

配置

kitty有很高的可以配置性,用户可以按需要定制快捷键和UI,并且它是通过文本文件来配置的,意味着配置可以通过网络分享,在异地重现。wezterm也是通过文本文件配置,不同的是,kitty使用自定义的文本conf格式,而wezterm使用图灵完备的lua语言配置。

多字体

在终端上我最多的使用场景是使用Vim编辑文本,常常会遇到多语言文本混合的情况,我希望能为不同语言的字符使用不同的字体(通常一个单独的字体也往往不能包罗万象,如果终端只能设置一个字体将会导致乱码)。wezterm对此提供了很好的支持,用户可以提供多个字体做为fallback,如果字体中不包含要渲染的字符,就从fallback列表里往下查找:

return {
  font = wezterm.font_with_fallback {
    'Cascadia Code',     -- 拉丁字母、标点
    'LXGW WenKai',       -- 中文
    'CaskaydiaCove NFM', -- icons
  },
}

kitty也支持类似的功能,但配置起来要麻烦点。首先可以设置一个字体家族做主要字体,然后通过symbol_map配置将部分unicode映射到其它字体上,例如symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols。这里列出我使用的配置:

font_family      Cascadia Code
font_size 18.0

# symbol_map
symbol_map U+23FB-U+23FE,U+2665,U+26A1,U+2B58,U+E000-U+E00A,U+E0A0-U+E0A3,U+E0B0-U+E0C8,U+E0CA,U+E0CC-U+E0D2,U+E0D4,U+E200-U+E2A9,U+E300-U+E3E3,U+E5FA-U+E6AD,U+E700-U+E7BC,U+E7C4-U+E7C5,U+EA60-U+EA88,U+EA8A-U+EA8C,U+EA8F-U+EAC7,U+EAC9,U+EACC-U+EAFA,U+EAFC-U+EB09,U+EB0B-U+EB4E,U+EB50-U+EBEB,U+F000-U+F00E,U+F010-U+F01E,U+F021-U+F03E,U+F040-U+F04E,U+F050-U+F05E,U+F060-U+F06E,U+F070-U+F07E,U+F080-U+F08E,U+F090-U+F09E,U+F0A0-U+F0AE,U+F0B0-U+F0B2,U+F0C0-U+F0CE,U+F0D0-U+F0DE,U+F0E0-U+F0EE,U+F0F0-U+F0FE,U+F100-U+F10E,U+F110-U+F115,U+F118-U+F11E,U+F120-U+F12E,U+F130-U+F13E,U+F140-U+F14E,U+F150-U+F15E,U+F160-U+F16E,U+F170-U+F17E,U+F180-U+F18E,U+F190-U+F19E,U+F1A0-U+F1AE,U+F1B0-U+F1BE,U+F1C0-U+F1CE,U+F1D0-U+F1DE,U+F1E0-U+F1EE,U+F1F0-U+F1FE,U+F200-U+F20E,U+F210-U+F21E,U+F221-U+F22D,U+F230-U+F23E,U+F240-U+F24E,U+F250-U+F25E,U+F260-U+F26E,U+F270-U+F27E,U+F280-U+F28E,U+F290-U+F29E,U+F2A0-U+F2AE,U+F2B0-U+F2BE,U+F2C0-U+F2CE,U+F2D0-U+F2DE,U+F2E0,U+F300-U+F32F,U+F400-U+F533,U+F0001-U+F012E,U+F0131-U+F0205,U+F0207-U+F02D0,U+F02D2-U+F02D4,U+F02D6-U+F02F4,U+F02F6-U+F0386,U+F0388-U+F043C,U+F043E-U+F05CC,U+F05CE-U+F0AF5,U+F0AF7-U+F0AF8,U+F0AFA-U+F0AFB,U+F0AFD-U+F0B02,U+F0B04,U+F0B06-U+F0C15,U+F0C18-U+F1AF0 CaskaydiaCove Nerd Font Mono
symbol_map U+4E00-U+9FFF,U+3400-U+4DBF,U+20000-U+2A6DF,U+2A700–U+2B73F,U+2B740–U+2B81F,U+2B820–U+2CEAF,U+F900-U+FAFF,U+2F800-U+2FA1F LXGW WenKai

窗口拆分、Tabs

我喜欢终端应该自带窗口拆分、多tabs切换功能,幸好kitty和wezterm都支持这两个功能。值得一提的是,kitty把一个Tab内水平/垂直的切分,称为Window(wezterm中是Pane),为了区分,将桌面系统的窗口称为OS window

windows

通过与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。

hints

不止于此,这个插件也可以和Vim集成,通过快捷键快速打开文件并编辑。

EOF
Github
Copyright © 2020-2024 Elliot