当我运行less
某个文件时,提示符消失,并且我在屏幕上看到文件的内容。然后当我按下 时q,它会返回到提示符。我认为less
这是通过保存当前终端缓冲区、打开新缓冲区、将文件输出到新缓冲区,然后在关闭时丢弃新缓冲区并恢复旧缓冲区来实现的,但我不知道这个过程叫什么或它是如何实现的。
我查看了一下,man less
但什么也没找到。我尝试用谷歌搜索,但找不到任何有用的东西,除了该screen
命令可以对 shell 会话执行相同的操作。
归根结底,我之所以问这个问题是因为我想git diff
使用新的缓冲区而不是内联打印。我已经设置了GIT_PAGER=less
和git --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
运行,如果内容适合单个屏幕则分别退出、显示颜色并跳过初始化终端。less
FRX
less
为了获得您想要的行为,请设置LESS
为-R
,或者将设置core.pager
git
设置为类似的内容less -+X
(man git-config
有关详细信息,请参阅)。