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 #343,Reload 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配色。
(完)