尝试用Vim充当kitty的scrollback pager
之前有介绍过,kitty是一个高度可配置的终端模拟器,但是一些初次使用的小伙伴表示kitty不像其它一些终端模拟器可以方便的搜索输出的内容。其实kitty有一个Scrollback pager的功能,可以结合第三方工具,将当前屏幕内容通过管道传递给第三方工具——官方默认使用的是less
。
但是我想用Vim来提供更强的搜索、跳转、复制等功能,并且和平时用Vim编辑文件有同样的操作体验,所以就研究了下kitty和Vim结合的方法,分享出来。
基础用法
添加这行配置后,按下ctrl+shift+g
,kitty会通过管道将显示的内容传给scrollback_pager
后的命令,vim -
命令可以从stdin
中读取内容,这样就可以实现用Vim来查找、复制kitty上的内容了。
无法直接退出
使用上述命令进入Vim后,会发现无法直接:q!
退出,提示buffer还没有写入,这种情况下可以用只读模式进Vim,如vim -R -
或者直接用view -
。
进入Vim时执行命令
可以使用vim -c "ex command" -
在读取kitty页面后执行ex命令,如vim -c "normal G" -
自动跳到行尾,vim -c "map <silent> q :qa!<CR>" -
映射q
键直接退出等等。
fish
如果你使用fish shell,恭喜你将遇到一个存在10年的老bug,解决办法嘛,可以使用vim -u NONE
不加载配置,但治标不治本。
ANSI escape sequences
终端模拟器可以通过ANSI escape sequences来控制显示文本的颜色、粗细等等,但对于Vim来说,这些只是普通字符而已,所以如果直接使用Vim做kitty的scrollback pager,常常会看到一些乱码,如下图:
已知的解决办法有两种:
还有一种将buffer写入文件,再在Vim内置终端内查看的邪道方法,但似乎只适用于NeoVim。
其它方式
kitty插件
如果只是需要更类似其他终端模拟器的搜索功能,也可以使用插件实现,已经有造好的轮子:kitty-kitten-search。
返朴归真
考虑到大部分情况下需要搜索复制功能是为了快速打开报错的文件之类的,其实直接用kitty内置的hints功能也是一个不错的选择。