尝试用Vim充当kitty的scrollback pager

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

之前有介绍过,kitty是一个高度可配置的终端模拟器,但是一些初次使用的小伙伴表示kitty不像其它一些终端模拟器可以方便的搜索输出的内容。其实kitty有一个​Scrollback pager​的功能,可以结合第三方工具,将当前屏幕内容通过管道传递给第三方工具——官方默认使用的是​less​。

但是我想用Vim来提供更强的搜索、跳转、复制等功能,并且和平时用Vim编辑文件有同样的操作体验,所以就研究了下kitty和Vim结合的方法,分享出来。

基础用法

scrollback_pager 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,常常会看到一些乱码,如下图:

Screenshot of Vim

已知的解决办法有两种:

还有一种将buffer写入文件,再在Vim内置终端内查看的邪道方法,但似乎只适用于NeoVim。

其它方式

kitty插件

如果只是需要更类似其他终端模拟器的搜索功能,也可以使用插件实现,已经有造好的轮子:kitty-kitten-search

返朴归真

考虑到大部分情况下需要搜索复制功能是为了快速打开报错的文件之类的,其实直接用kitty内置的hints功能也是一个不错的选择。

EOF
文章有帮助?为我充个
版权声明