最近我的系统因为神秘的内存泄漏而变得不稳定。结果,我的 Xorg 进程经常Out of memory
被/var/log/syslog
.
为了在崩溃的情况下保存我的vim
会话,我在screen
.
不幸的是,在 Xorg 被杀死后,我无法恢复vim
会话。重新连接的外壳完全混乱。到目前为止,每次我试图通过盲目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
在恢复的屏幕窗口中发现了一条消息。
如果 Vim 在打开文件时抱怨交换文件,有两种情况:要么来自另一个当前正在运行的 Vim 进程,要么来自崩溃的 Vim 进程。
如果它来自正在运行的进程,则消息将如下所示:
请注意它
(still running)
在进程 ID 旁边的说明。由于 Vim 的交换文件崩溃而导致的错误不会出现这种情况(除非巧合,另一个当前正在运行的进程获得了相同的 PID)。如果它来自崩溃的 Vim,您可以选择从交换文件中恢复,然后将其删除。如果它来自一个当前正在运行的 Vim 进程,你可以杀死它(交换文件会让你恢复),或者如果你不希望交换文件到处存在,你可以选择优雅地退出。对于后一种选择,如果您没有
screen
或没有这样的方式与 Vim 进程交互,您可以使用 Python 向它发送关键代码,如我在另一篇文章中所述。