当我less
在某个文件上运行时,提示消失了,我在屏幕上看到了文件的内容。然后,当我按 时q,它会返回提示。我认为less
通过保存当前终端缓冲区,打开一个新缓冲区,将文件输出到新缓冲区,然后在关闭时,丢弃新缓冲区并恢复旧缓冲区来做到这一点,但我不知道这个过程被称为什么或它是如何做到的。
我看了看,man less
但什么也没找到。我尝试用谷歌搜索它,但找不到任何有用的东西,除了该screen
命令可以对 shell 会话执行相同的操作。
最终,我问是因为我想git diff
使用新的缓冲区而不是内联打印。我已经设置了GIT_PAGER=less
and git --paginate diff
,但他们没有改变任何东西。我有一个解决方法,但它有点长:git diff --color=always | less -R
更新:经过一些研究,它看起来tput smcup
和tput rmcup
是执行相同操作的高级命令,可能使用termcap
包。
的所有
less
屏幕管理功能都在其screen.c
模块中。在启动时,除非它处于“no init”(-X
或--no-init
)模式,否则它会输出其sc_init
字符串,即termcap
'sti
字符串(“终端初始化”,它使终端准备好进行全屏、光标控制操作)。在退出时,它输出它的sc_deinit
字符串,即termcap
'ste
string。您看到的行为是默认行为
git
,如果less
未配置(即LESS
变量未设置);在这种情况下,使用选项git
运行,如果内容适合单个屏幕,显示颜色并跳过初始化终端,则会导致分别退出。less
FRX
less
要获得您所追求的行为,请设置
LESS
为-R
,或将core.pager
git
设置设置为类似的内容less -+X
(请参阅man git-config
详细信息)。