我必须使用一个需要通过某些 Citrix/Windows 虚拟化登录才能最终访问 RedHat EL 6 系统的系统,在该系统中我遇到了一些管理员无法修复的非常奇怪的行为。
基本上,除非我在屏幕内使用,否则两者似乎都工作正常vi
。vim
一旦进入屏幕,如果我移动到显示的初始内容之外(即移动到比屏幕可以显示的长度长的文件末尾或中间,或者我向下滚动到底部一行或二)。当这种情况发生时,终端屏幕底部绘制的“INSERT”会将所有内容向上推一行。如果您的编辑很小(即没有移动并在不同的行上进行许多更改),通常没问题,但是重绘的内容不正确(有时 vi 本身的附加反馈会将前一行向上滚动,因此您最终会得到两行 - INSERT -- 行或其他文本)但是,如果您在插入后四处移动,特别是如果您强制窗口的内容滚动或完全绘制,那就完全是一团糟。将光标移动到行尾或任何不遵循屏幕上显示内容的位置。
更令人沮丧的是,可以通过两种方式访问这个奇怪的系统:1 通过终端会话(通过虚拟化 IE 浏览器),1 通过 VNC 桌面(通过相同的虚拟化)。不幸的是,由于刷新问题和卡住字符(随机字符重复数百次),VNC 桌面完全无法用于命令行。但是,尽管存在这些问题,vi 确实可以在屏幕内运行。
我已将两种类型的 vi 会话中的变量转储到文件中,它们是不同的,但我不太了解 vi,无法知道哪些变量可能是罪魁祸首。
FWIW,两者都使用相同的 VIM 7.2.411 二进制文件(/bin/vi 仍然存在问题)和屏幕 4.00.03 两者都在同一台机器上
当我提交帮助台票证时,管理员安装了较新版本的 VIM,这实际上使问题变得不那么严重,但除了非常小的更改之外,它仍然无法用于编辑文件。
答案1
问题可能是您的屏幕配置为使用终端窗口的最后一行作为硬状态行,并且您在 screenrc 中打开一个窗口前配置硬状态行。您的屏幕配置是否包含类似的内容?
screen 1
# ...
hardstatus alwayslastline "..."
在这种情况下,screenrc 中的 screen 命令打开的窗口没有配置正确的行数——它没有考虑 Hardstatus 行使用的行。然而,其他窗口应该没问题(比较stty size
由 screenrc 打开的初始窗口和其他窗口的输出)。
我已经针对这个问题打开了一个错误这里。尽管回想起来,hardstatus 配置之前的 screen 命令可能会产生这种效果,但从用户的角度来看,这是非常意外的(许多配置文件没有排序的概念)。另外,奇怪的是,如果你做了类似的事情:
screen 1
screen 2
screen 3
# ...
hardstatus alwayslastline "..."
只有窗口 3 配置不正确。