Windows上有一个SSH终端叫Kitty(Putty的改版), 但本文所要说此Kitty非彼Kitty。我们所讨论的是一个Terminal,类似于Terminal.app、MinTTY、iTerm等等。kitty - the fast, featureful, GPU based terminal emulator

间接

kitty的作者叫做Kovid Goyal。有些使用Kindle的同学可能用过他的另一款作品:Calibre,一款电子书管理工具。Kitty是Kovid Goyal近两年的新作。

前面说了,kitty是一款OpenGL加速的terminal。好多人会问,都GUI时代了,为什么还有好多人使用terminal。首先,好多人使用terminal是为了方便远程开发,例如用SSH登录服务器,然后开一个session管理器(比如tmux),然后再用Vim、Emacs或者Micro之类的编辑器写代码。可能习惯这种远程的工作方式,我是在本机上写代码的时候也是在terminal里面。我的工作方式是这样的,我只有一个MacBook,但是没有外接显示器,所以只能用笔记本屏幕。我打开两个macOS自带的Terminal.app,然后左右平分(就像iPad上的多任务一样),在一边Terminal上开Vim作为编辑器,另一边Terminal上做各种其他事……(我是因为穷才这么用,而不是这样很酷)

macOS自带的Terminal.app需要吐槽一下,稍微换一个配色(比如换成dracula),就能明显感觉到渲染变慢。所以才逼得我去找一个更快的terminal。看了几个比较新潮的terminal:Alacritty、Kitty和Hyper,最后选择了kitty。不选Hyper是因为这家伙基于Electron,虽然颜值高,但是流畅度没有达到我的期望;Alacritty使用了Rust编写,快是很快,但是配置似乎不太全;最后只有kitty了,速度不错,配置丰富,用C和Python所写,跨平台能力强。

kitty一个值得称道的地方是它可以像tmux一样,把一整块屏幕分为多个区域。不过,我个人还是比较喜欢开多个kitty窗口,用操作系统自带的窗口管理器管理。另一特色的地方是kitty支持kitten,每个kitten就像是一个小插件(比如这个remote control,不过我还没有深入研究这个。

在macOS上安装kitty

第一次我使用brew cask install kitty来安装,貌似有一些问题,于是我直接用官方文档中的kitty - Binary install¶方式,通过curl来安装:

curl -L https://sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdin

安装成功之后,会出现在/Applications/kitty.app。需要注意的是,上面的操作只会安装kitt的app,而不会安装其命令行。参考How do I specify command line options for kitty on macOS?¶

我是直接把kitty的命令行软链接到一个自定义的PATH目录下的:

ln -s /Applications/kitty.app/Contents/MacOS/kitty ~/.bin

配置kitty

打开一个kitty窗口,输入kitty --debug-config命令可以看到当前kitty的已有配置,以及kitty所读取的配置文件的位置。

在macOS上,kitty会在两个地方查找配置文件kitty.conf

  • ~/.config/kitty/kitty.conf
  • ~/Library/Preferences/kitty/kitty.conf

二选一用就行了。

官方文档Configuring kitty¶上有非常详尽的介绍。打开你的kitty.conf,里面也有非常多的注释可以参考。

Google了一下,发现kitty应该不支持自动重新加载kitty.conf,这意味着每次改完配置都得关掉kitty的全部窗口然后重新启动。kitty的作者在Reload kitty.conf #635确认了没有自动加载配置的功能。 Reload config on SIGUSR1 #343Reload config file without restart #1292

我所做的一些配置上的修改:

  • cursor_blink_interval 1000,不喜欢看到光标在闪,把闪烁间隔改成1000秒
  • tab_bar_edge top,把窗口标签放在上面,默认是在底部
  • font_family Monaco,使用Monaco字体
  • font_size 15.0,设一个稍微大一点的字体,避免眼睛看瞎了
  • adjust_column_width -1,kitty的默认字体渲染间隔会比Terminal.app宽,将间隔缩小一个像素

为了适配原先Terminal.app的快捷键,我设置了下面的两个键映射

  • map cmd+shift+] next_tab
  • map cmd+shift+[ previous_tab

根据CMD key for Mac #676,你可以使用super甚至是来替换上面的cmd

如果你也使用zsh的话,可以把下面的配置加入到.zshrc来对kitty命令行补全:

autoload -Uz compinit
compinit
# Completion for kitty
kitty + complete setup zsh | source /dev/stdin

配色方案

kitty默认的配色方案在我的电脑上看起来太黑了。所以我找了kitty-snazzy/snazzy.conf来使用(其实也很黑,不过我没有找到亮色的方案)。

snazzy.conf保存到和kitty.conf同一个目录,然后在kitty.conf中使用include来包含snazzy.conf

include snazzy.conf

根据这个Comment想要查看修改的配色效果的话可以使用remote control这个kitten来协助,首先需要在kitty.conf里面开启remtoe control:

allow_remote_control yes

然后在kitty窗口输入下面的命令即可:

kitty @ set-colors --all --configured

其他配色方案:

如果没有中意的,可以到https://terminal.sexy/来DIY配色。

(完)