从在“screen”下运行的“vim”实例上的 X 崩溃影响中恢复

从在“screen”下运行的“vim”实例上的 X 崩溃影响中恢复

我已经使用了screen很多。我的动机之一是希望我的编辑会话(例如实例vim)在 X 崩溃后能够继续存在。尽管会话screen确实比 X 更持久,但我发现在 X 重新启动后它就完全不能用了。 vim特别是似乎出现了一些奇怪的故障,比如无法正确重绘屏幕;而且我无法看到 shell 命令(例如)输出的文本:!ls

我正在使用 ubuntu 10.04 版本的软件包vim-gnome。这是版本7.2.330-1ubuntu3。这个版本的vim可以作为 GNOME2 GUI 应用程序或控制台应用程序运行,这可能很重要。即使从控制台运行,它也会以某种方式与 X 集成,例如提供对剪贴板的访问。

有没有什么方法可以防止这些问题发生或者从这种状态恢复?

vim在X 坠毁事件中幸存的实例中出现的显著症状列表:

  • 命令行上 tab 补全不起作用:^I而是插入一个字符。例如,当尝试补全作为参数传递给 的有效文件名时,就会发生这种情况:tabedit

  • q:没有反应。 :^F似乎可以工作,但前几次启动时有点奇怪——它似乎暂停了几秒钟,没有硬盘或 CPU 活动,然后才启动。与此同时,我能够使用 、j等将光标移动k到命令行缓冲区窗口稍后出现的区域中。

    更新:经过进一步检查,似乎只有当我尝试将光标移到行尾以外时,它才会绘制命令行窗口。

    ^C无法取消命令行窗口。如果我想退出而不运行命令,我必须点击[ENTER]空白行。

  • 在命令行上输入的命令行命令(即不是从命令行缓冲区窗口输入的命令行命令)不会添加到命令行历史记录中。

  • :ls命令和其他通常显示多行输出的命令不显示输出。EG:echo "onefish"工作正常,但该命令不显示任何输出:echo "onefish\ntwofish"

  • 如上所述,shell 命令的输出未出现。使用 curses 的 Shell 命令(例如:!man ls)可以工作。

  • X 剪贴板已注册@*且不@+可用:例如,尝试通过 粘贴时会"+p出现错误E353: Nothing in register +。我有点期待这个特定问题的存在,并怀疑它可能与其他问题无关。无论如何,找到解决方案会很棒。

我目前的解决方法是执行 a :mksession,然后退出vim并重新启动该会话。这会有点麻烦,因为我有大约 10 个vim实例在运行,其中许多实例有一些有用的未命名缓冲区、vimscript 变量和其他未保存到会话的实体。

我尝试了@{griff steni.us} 的建议,但:redraw!似乎都^L I没有任何有用的效果。 ^L I确实使显示屏闪烁。

答案1

我只是猜测,但也许屏幕实例比你现在的终端尺寸更大,即不是 80x24 个字符。

在 vim 中你可以执行:redraw!

您可以在屏幕上尝试重新显示 ^L l

相关内容