设计理念:kitty –快速,功能丰富的基于GPU的终端仿真器

2021-02-27 09:06:52

将渲染工作卸载到GPU,以降低系统负载并实现平滑的滚动。使用线程渲染来最大程度地减少输入延迟。

支持所有现代终端功能:图形(图像),unicode,真彩色,OpenType连字,鼠标协议,超链接,焦点跟踪,带括号的粘贴以及一些新的终端协议扩展。

支持以不同的布局并排平铺多个终端窗口,而无需使用诸如tmux的额外程序

具有用于小猫和小型终端程序的框架,可用于扩展小猫的功能。例如,它们用于Unicode输入,提示和并排差异。

支持启动会话,使您可以指定窗口/选项卡的布局,工作目录和要在启动时运行的程序。

跨平台:kitty在Linux和macOS上均可使用,但是由于它仅使用OpenGL进行渲染,因此移植到其他类似Unix的平台应该很简单。

允许您使用所选的任意程序在单独的窗口中打开回滚缓冲区。这对于在寻呼机或编辑器中轻松浏览历史记录很有用。

kitty是为电动键盘用户设计的。为此,它的所有控件都可以通过键盘进行操作(尽管它也完全支持鼠标交互)。它的配置是一个简单的,可人工编辑的单个文件,可简化重现性(我喜欢将配置存储在源代码管理中)。

kitty中的代码被设计为简单,模块化和可破解的。它是用C(对于性能敏感的部分)和Python(便于UI的可破解性)混合编写的。它不依赖任何大型且复杂的UI工具包,仅使用OpenGL渲染所有内容。

最后,kitty是从头开始设计的,以支持所有现代终端功能,例如unicode,本色,粗体/斜体字体,文本格式等。它甚至扩展了现有的文本格式转义码,以增加对其他地方不可用的功能的支持,例如如彩色和样式(卷曲)下划线所示。 kitty的设计目标之一是易于扩展,以便将来可以以相对较少的努力添加新功能。

kitty能够运行组织在选项卡和窗口中的多个程序。组织的最高层是选项卡。每个选项卡包含一个或多个窗口。窗口可以以多种不同的布局进行排列,就像窗口在平铺窗口管理器中进行组织一样。选项卡和窗口的键盘控件(都可以自定义)是:

ctrl + shift + 1,ctrl + shift + 2 ... ctrl + shift + 0(在macOS上也是⌘+ 1,⌘+ 2 ...⌘+ 9)(从左上角顺时针方向)

另外,您可以在kitty.conf中定义快捷方式,以使相邻窗口集中并四处移动窗口(类似于vim中的窗口移动):

nth_window将把第n个窗口聚焦在正数上,将先前活动的窗口聚焦在负数上。

您可以定义快捷方式来分离当前窗口并将其移至另一个选项卡或另一个OS窗口:

#将窗口移至新的OS窗口映射ctrl + f2 detach_window#将窗口移至新的选项卡映射ctrl + f3 detach_window new-tab#询问哪个标签将窗口移至映射ctrl + f4 detach_window询问

#将选项卡移至新的OS窗口映射ctrl + f2 detach_tab#询问要将哪个选项卡移至映射ctrl + f4 detach_tab的OS窗口

最后,您可以定义一种快捷方式来关闭选项卡中除当前活动窗口以外的所有窗口:

布局是顶层OS窗口内多个kitty窗口的排列。您可以使用Ctrl + Shift + Enter键组合创建一个新窗口。

胖-顶部全宽显示一个(或可选的更多)窗口,底部并排显示其余窗口

高-左侧以全高显示一个(或可选地,多个)窗口,其余窗口在右侧显示一个,另一个在下方

默认情况下,所有布局均处于启用状态,您可以使用ctrl + shift + l组合键在布局之间进行切换。您也可以创建快捷方式来选择特定的布局,并选择要启用/禁用的布局,有关示例,请参见布局管理。 enabled_layouts中列出的第一个布局将成为默认布局。

kitty有一个框架,可以轻松创建利用其高级功能的终端程序。这些程序称为小猫。它们既可用于为kitty本身添加功能,也可用于创建有用的独立程序。一些著名的小猫:

从终端屏幕中选择并打开/粘贴/插入任意文本片段,例如URL,文件名,单词,行等。

使用ripgrep搜索文件,然后直接在终端上您喜欢的编辑器中的包含搜索结果的行中打开结果,只需单击所需的结果即可。

输入一个小猫窗口,并将其广播到其他小猫窗口的所有(或子集)。

在桌面上绘制一个GPU加速坞面板,以显示任意终端程序的输出。

kitty是高度可配置的,从键盘快捷键到每秒绘画帧,应有尽有。有关详细信息和kitty.conf示例,请参阅配置文档。

kitty有一个非常强大的系统,即使在SSH上,您也可以从shell提示符下对其进行控制。您可以更改颜色,字体,打开新窗口,标签,设置其标题,更改窗口布局,从一个窗口获取文本并将文本发送到另一个窗口等等,等等。请参阅教程以开始使用。

您可以控制选项卡,窗口布局,工作目录,启动程序等。通过创建" session"文件并使用kitty --- session命令行标志或kitty.conf中的startup_session选项,例如:

#设置当前选项卡布局的窗口布局为高##在当前选项卡中设置窗口的工作目录cd〜#创建一个窗口并在其中运行指定的命令启动zsh#创建一个设置了一些环境变量的窗口并运行#vim启动--env FOO = BAR vim#设置下一个窗口标题的标题。与x聊天irssi --profile x#创建一个新标签(在new_tab之后的部分是可选标签#名称将显示在标签栏,如果省略,则使用#激活窗口的标题。)new_tab我的标签cd〜/ somewhere#设置此标签中允许的布局enabled_layouts高,堆栈#设置当前布局的堆栈启动zsh#创建一个新的操作系统窗口new_os_window#将新窗口大小设置为80x25单元格os_window_size 80c 25c#设置新OS窗口的--class os_window_class mywindow launch sh#使当前窗口成为活动的(聚焦的)窗口焦点启动emacs

在会话文件中使用启动命令时,无法创建新的OS窗口或选项卡。

您可以按住ctrl + shift键并单击URL在浏览器中将其打开。

您可以双击以选择一个单词,然后拖动以选择更多的单词。

您可以单击三次以选择一条线,然后拖动以选择更多条线。

您可以按住ctrl + alt并用鼠标拖动以选择列(另请参见rectangular_select_modifiers)。

即使在终端程序抓住鼠标的情况下,也可以通过按住Shift键来选择带有小猫的文本(另请参阅terminal_select_modifiers)。

kitty具有非常灵活和强大的字体选择功能。您可以为常规,粗体,斜体和粗体+斜体字体指定单个家庭。您甚至可以为特定范围的unicode字符指定特定的字体系列。这样可以精确控制文本渲染。对于电力线之类的应用程序,它可以派上用场,而无需使用patchedfonts。请参阅“字体”中与字体相关的各种配置指令。

kitty支持向后滚动以查看历史记录,就像大多数终端一样。您可以使用键盘快捷键或鼠标滚轮来执行此操作。但是,小猫有一个额外的,整洁的功能。有时,您需要更详细地探索回滚缓冲区,也许搜索一些文本或在键入后续命令时并排引用。 kitty允许您通过按ctrl + shift + h组合键来执行此操作,这将在您喜欢的传呼程序中打开滚动缓冲(默认情况下较少)。保留颜色和文本格式。您可以在寻呼机内舒适地浏览回滚缓冲区。

另外,您可以将回滚缓冲区的内容传递给任意命令,该命令在新窗口,选项卡或覆盖中运行,例如:

当您按F1键时,将在新窗口中打开回滚缓冲区。有关详细信息,请参见ctrl + shift + h。

如果您想与vim之类的编辑器一起使用它以获得更强大的功能,您可以在此线程中看到有关此操作的提示。

如果您希望存储大量回滚以使用管道功能或ctrl + shift + h功能进行查看,则可以使用scrollback_pager_history_size选项。

除了能够从系统剪贴板复制/粘贴外,在kitty中,您还可以设置任意数量的复制粘贴缓冲区。为此,只需在kitty.conf中添加以下内容:

这将允许您按F1键将当前选择复制到名为a的内部缓冲区,然后按F2键从该缓冲区粘贴。缓冲区名称是任意字符串,因此您可以根据需要定义任意数量的此类缓冲区。

kitty可以根据正则表达式在屏幕上标记文本。这对于在浏览长期运行的程序或类似程序的输出时突出显示单词或短语非常有用。要了解此功能的工作原理,请参阅标记。

kitty提供了非常强大的界面,例如通过脚本或外壳控制Kitty以及“定制”小猫和icat-在终端中显示图像,使其可以与其他工具无缝集成。有关此类用户创建的集成的列表,请参见:与其他工具的集成。

bash的较早版本(例如,v3.2)不支持使用source命令进行进程替换,在这种情况下,您可以尝试以下替代方法:

上面重要的是要确保对kitty的调用会在对compinit的调用之后发生,以加载zshcompletions。

对于3.0.0之前的fish版本,将以下内容添加到〜/ .config / fish / config.fish中。 默认情况下,更高版本会完成补全。