Sol*_*Sol 17 linux bash command-line scrolling
我通常使用 tcsh 或 bash,并且经常想使用“man”来查看命令的选项。目前,当我退出 man 或 ctrl-C 时,man 文本消失,我看到在执行“man”命令之前存在的回滚缓冲区。当我在命令提示符下键入命令而不打开第二个窗口时,我仍然希望看到我正在查看的“man”文本作为参考,我该怎么做?
Chr*_*sen 18
此行为来自某些(硬件)终端和大多数(软件)终端仿真器中包含的“交替屏幕”功能。发生的情况是一些终端感知程序切换到备用“屏幕”来完成它们的工作,并在它们被关闭(退出、暂停等)时切换回正常的“屏幕”。这有效地清除了此类程序的最终输出。
对“terminfo prevent altscreen”的网络搜索提供了一个讨论替代屏幕“问题”和几种解决方案的页面。
正如该链接页面所描述的那样,可以配置某些程序以避免使用备用屏幕。较少的-X选项是这样做的间接方式。可以通过取消设置和变量来类似地配置 Vim 。t_tit_te
范围更广的解决方案是编辑终端的terminfo条目,使其不包含备用屏幕控制序列。terminfo 条目形成一个数据库,它告诉程序将哪些控制序列发送到终端以创建某些效果(移动光标、清除屏幕、擦除当前行的一部分等)。通过编辑终端使用的 terminfo 条目,您可以安排“忽略告诉”所有使用 terminfo 的程序“交替屏幕”控制序列甚至存在。
从xterm的控制序列列表中,我们可以看到感兴趣的控制序列(对于类似 xterm的终端模拟器)是
ESC [ ? 47 h同样适用于 1047 和 1049),以及ESC [ ? 47 l同样适用于 1047 和 1049)。这些代码很可能出现在 terminfo 变量smcup和rmcup. 为您当前的 TERM 删除这些变量的快速而肮脏的方法可能如下所示:
infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
Run Code Online (Sandbox Code Playgroud)
这种方法相当粗糙,肯定不适用于所有终端,但它可能适用于大多数类似 xterm的终端模拟器。理想情况下,您应该调查终端的 terminfo 条目的smcup和rmcup变量中的值,并保守地编辑它们以防止出现不需要的行为。上面链接的讨论/解决方案页面有一个“预煮”的 terminfo 文件,您可以使用它来代替自己的黑客攻击(但这有什么乐趣?)。
假设您的寻呼机是less,请将环境变量设置LESS为包含“X”。例如我的是:
LESS="-iMFXRj4a"
Run Code Online (Sandbox Code Playgroud)
你可以在你的~/.bashrc文件中设置
export LESS="-X"
Run Code Online (Sandbox Code Playgroud)
并包括您已经拥有的任何其他选项或添加您喜欢的选项。
| 归档时间: |
|
| 查看次数: |
5123 次 |
| 最近记录: |