如何在较少的单独缓冲区中显示长git输出?

时间:2014-10-10 08:06:16

标签: git terminal

当我打开less时,它在一个单独的缓冲区中(可能还有另一个术语?):我终端的滚动条消失了,我可以用鼠标滚轮滚动。关闭less后,我的bash会话就会恢复。

如果我从git输出很长时间,它会自动传送到less,但在这种情况下,它使用与我的会话相同的缓冲区。终端的滚动条停留,用鼠标滚轮滚动滚动会话并来回滚动(使用键盘)离开终端中显示的所有内容。通过连续击中j和k可以很容易地显示最后一件事。滚动终端缓冲区时,第一行将重复多次。

使用less工作的其他工具,例如psql的长输出,在{1}}的单独缓冲区中显示。我怎样才能让git做同样的事情?

1 个答案:

答案 0 :(得分:2)

git-config(1)说:

  

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也被禁用了。如果输出适合屏幕,则会立即退出。因为输出在另一个缓冲区中,所以命令会立即返回而不打印任何内容。