“less”如何切换到文本,然后回到提示?

wja*_*rea 8 command-line git less

当我运行less某个文件时,提示消失,我在屏幕上看到文件的内容。然后当我按下 时q,它会返回到提示。我认为less通过保存当前终端缓冲区,打开一个新缓冲区,将文件输出到新缓冲区,然后关闭时,丢弃新缓冲区并恢复旧缓冲区来做到这一点,但我不知道这个过程被称为什么或它是如何做到的。

我看了看,man less但没有找到任何东西。我尝试使用谷歌搜索它,但找不到任何有用的东西,除了该screen命令可以对 shell 会话执行相同的操作。

最终,我问是因为我想git diff使用新的缓冲区而不是内联打印。我已经设置了GIT_PAGER=lessand git --paginate diff,但他们没有改变任何东西。我有一个解决方法,但它有点长:git diff --color=always | less -R

更新:经过一番研究,它看起来像tput smcuptput rmcup高层次的命令做同样的事情,可能使用的termcap包。

Ste*_*itt 5

的所有less屏幕管理功能都在其screen.c模块中。在启动时,除非它处于“no init”(-X--no-init)模式,否则它会输出其sc_init字符串,termcapti字符串“终端初始化”,它使终端准备好进行全屏、光标控制操作)。在退出时,它输出其sc_deinit字符串,termcaptestring

行为你看到的是默认的行为git,如果less没有配置的(LESS变量没有设置); 在这种情况下,使用选项git运行less,如果内容适合单个屏幕,则分别退出,显示颜色,并跳过初始化终端。FRXless

要获得您所追求的行为,请设置LESS-R,或将core.pager git设置设置为类似less -+Xman git-config有关详细信息,请参阅)。