我在笔记本电脑上本地运行屏幕会话。在该屏幕会话中,我通过 ssh 连接到我完成大部分工作的服务器。由于该连接有时会重置(例如 VPN 超时),因此我也在服务器上运行屏幕会话,以便我可以重新连接到它并让我的 shell 保持原样。
所以我的工作流程是:唤醒笔记本电脑,切换到终端,找到本地屏幕会话正在运行,但显示一条消息显示连接超时,通过 ssh 连接到我的服务器,运行screen -x
以重新连接到服务器上的屏幕会话,然后完成我的工作。
~/.screenrc
服务器上的文件仅包含一行,altscreen on
.否则,我所有的自定义屏幕内容(包括将元字符自定义为 Ctrl-Space,以及带有窗口名称的状态栏)仅位于我的笔记本电脑上。 (我altscreen on
笔记本电脑的.screenrc
文件中也有。)
这样做的结果是,我可以使用 Ctrl-A(默认)控制远程屏幕会话,并且可以使用 Ctrl-Space 控制本地屏幕会话。我通常不控制远程屏幕会话,也不用它做任何事情,除了连接到它之外,但这就是我的问题所在。
目前,如果我尝试使用 Ctrl-Space+[ 在远程服务器上向后滚动,则它无法正常工作。我可能会看到我之前打开的 Vim 缓冲区的内容或其他内容。要在远程服务器上向后滚动,我有使用 Ctrl-A+[。
我怎样才能做到这一点,以便我可以正常滚动,即使用 Ctrl-Space+[,并查看远程服务器上我的 shell 的正确回滚历史记录? 换句话说,我想假装它screen
甚至不存在于远程服务器上,因为我只想将它用于恢复连接中断之前我停止的工作。
答案1
screen
是另一个终端内的终端模拟器。您可以在外部屏幕中向后滚动,但如果您在其中运行的应用程序类似于screen
或vim
或另一个半图形应用程序,它实现了其屏幕渲染,包括自行滚动,并且不使用终端(此处screen
)滚动缓冲区,那么就有终端(此处screen
)对此无能为力。
例如,如果你screen
在里面跑步,情况也是一样的。xterm
您不能xterm
再使用 的滚动条。
您会注意到,当您重新连接远程屏幕时,您会看到远程终端屏幕的内容screen
,并且可以访问它是回滚缓冲区(通过与那 screen
)。