当我打开less
时,它在一个单独的缓冲区中(可能还有另一个术语?):我终端的滚动条消失了,我可以用鼠标滚轮滚动。关闭less
后,我的bash会话就会恢复。
如果我从git输出很长时间,它会自动传送到less
,但在这种情况下,它使用与我的会话相同的缓冲区。终端的滚动条停留,用鼠标滚轮滚动滚动会话并来回滚动(使用键盘)离开终端中显示的所有内容。通过连续击中j和k可以很容易地显示最后一件事。滚动终端缓冲区时,第一行将重复多次。
使用less
工作的其他工具,例如psql
的长输出,在{1}}的单独缓冲区中显示。我怎样才能让git做同样的事情?
答案 0 :(得分:2)
core.pager
git将用于分页输出的命令。可以使用GIT_PAGER环境变量覆盖。请注意,如果在运行寻呼机时未设置LESS,则git会将LESS环境变量设置为FRSX。
关键部分是X
变量的LESS
。少咨询'手册页:
-X或--no-init
禁止将termcap初始化和取消初始化字符串发送到终端。如果取消初始化字符串不需要某些操作,例如清除屏幕,则有时需要这样做。
所以我们需要禁用它。幸运的是,git-config(1)显示了解决方案:
如果您想有选择地覆盖GESS的LESS默认设置,您可以将core.pager设置为例如少 - + S.这将由Git传递给shell,它将最终命令转换为LESS = FRSX less - + S.
很好,如果我们对默认值感到满意,这比自己设置LESS
变量更容易。所以解决方案变成了:
git config --global core.pager 'less -+X -+F'
这将重新启用termcap初始化,包括创建新缓冲区。不幸的是F
也被禁用了。如果输出适合屏幕,则会立即退出。因为输出在另一个缓冲区中,所以命令会立即返回而不打印任何内容。