Xorg 崩溃后恢复在屏幕会话中运行的 vim

Xorg 崩溃后恢复在屏幕会话中运行的 vim

最近我的系统因为一个神秘的内存泄漏变得不稳定。结果,我经常用Out of memory中的条目终止 Xorg 进程/var/log/syslog

vim为了在发生崩溃时保存我的会话,我在 中运行它screen

不幸的是,Xorg 被关闭后,我无法恢复会话vim。重新连接的 shell 完全乱了。到目前为止,每次我试图vim通过发出:qa命令来退出时,我都会盲目地输入。然后每次按下时,Enter我都会得到提示同一条线

我怀疑vim没有运行(必须在下次崩溃后验证它),因为:

  1. 尽管我发出了:qa命令,新vim会话还是警告我存在交换文件,
  2. 我可以:qa在我的文件中看到该命令.bash_history

关闭终端仿真器窗口后恢复工作正常。

我还能做什么(除了修复内存泄漏)来保留我的vim会话?

版本:vim- 7.4.52,screen- 4.01.00devel,Ubuntu - 14.04.5

[编辑] vim在崩溃后肯定没有运行 - 今天我ICE default IO error handler doing an exit(), pid = 12810, errno = 11在恢复屏幕窗口中发现了一条消息。

答案1

如果 Vim 在打开文件时抱怨交换文件,则有两种情况:要么是来自另一个当前正在运行的 Vim 进程,要么是来自崩溃的 Vim 进程。

如果它来自正在运行的进程,则消息将如下所示:

E325: ATTENTION
Found a swap file by the name ".foo.swp"
          owned by: muru   dated: Thu Feb 16 15:59:59 2017
         file name: ~muru/foo
          modified: no
         user name: muru   host name: localhost
        process ID: 870 (still running)
While opening file "foo"

注意进程 ID 旁边的显示方式(still running)。由于 Vim 的交换文件崩溃而导致的错误不会显示该信息(除非恰巧另一个当前正在运行的进程也获得了相同的 PID)。如果是因 Vim 崩溃而导致的,您可以选择从交换文件中恢复,然后将其删除。

如果它来自当前正在运行的 Vim 进程,您可以终止它(交换文件将允许您恢复)或者选择正常退出(如果您不想要交换文件闲置)。对于后一种选择,如果您没有screen或没有其他方式与 Vim 进程交互,您可以使用 Python 向其发送密钥代码,如中所述我的另一篇帖子。

相关内容