最近我的系统因为一个神秘的内存泄漏变得不稳定。结果,我经常用Out of memory
中的条目终止 Xorg 进程/var/log/syslog
。
vim
为了在发生崩溃时保存我的会话,我在 中运行它screen
。
不幸的是,Xorg 被关闭后,我无法恢复会话vim
。重新连接的 shell 完全乱了。到目前为止,每次我试图vim
通过发出:qa
命令来退出时,我都会盲目地输入。然后每次按下时,Enter我都会得到提示同一条线。
我怀疑vim
没有运行(必须在下次崩溃后验证它),因为:
- 尽管我发出了
:qa
命令,新vim
会话还是警告我存在交换文件, - 我可以
: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 向其发送密钥代码,如中所述我的另一篇帖子。