【发布时间】:2020-03-12 21:07:30
【问题描述】:
当我在某个文件上运行git diff 时,它使用的是什么寻呼机?我问是因为对于我在 Linux 中与寻呼机一起使用的所有其他命令行工具,当我退出时(通过输入“q”),终端会恢复到之前显示的内容,唯一的证据是我运行了 s.t.作为命令行本身。例如:
> git help diff
>
与man、less 本身等相同。但是当我运行git diff 时,整个差异仍然在屏幕上,即使它有数百行长。因此,如果我想查看先前命令的输出,我必须向后滚动。
这似乎是less -X 的行为,它“禁止将 termcap 初始化和去初始化字符串发送到终端”。
我已经阅读了git diff 的文档,但我没有看到它说明如何将终端恢复到运行差异之前的状态。我可以export PAGER=/bin/less,但这没有效果(它可能是git diff 的默认寻呼机)。
可能是git diff 以某种方式将-X 参数传递给less。但如果是这样,我无论如何也看不到关闭这种行为(less 的手册页对此保持沉默)。
相关:https://unix.stackexchange.com/questions/167735/can-less-f-be-usefully-combined-with-termcap-initialization。但这并不能告诉我为什么git diff 的行为就像它正在传递-X 参数一样。 (FWIW,我的终端报告它是 xterm-256color。)
【问题讨论】:
-
据我自己阅读代码所猜测的,git使用自己的寻呼机。
-
很确定它使用 GIT_PAGER,然后是 PAGER
-
与此相关的文档在
man git,而不是git help diff。具体来说,--paginate、--no-pager选项,配置选项core.pager和pager.<cmd>,以及环境变量PAGER和GIT_PAGER。