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

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

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

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

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

更新:经过一番研究,它看起来像是tput smcup执行tput rmcup相同操作的高级命令,可能使用termcap包。

答案1

所有less屏幕管理功能均位于其screen.c模块。启动时,除非处于“无初始化”(-X--no-init)模式,否则它会输出其sc_init字符串,这是termcap字符串ti本站正在整理终端初始化信息,使终端准备好进行全屏、光标控制操作)。在退出时,它输出sc_deinit字符串,这是termcap字符串te

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

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

相关内容