如果您不想丢失可能未保存的文本,此消息实际上非常重要。它应该不被认为是令人讨厌的,应该不会使你贸然删除交换文件或配置vim
离不开它运行。
您编辑的所有文件vim
都会有相应的交换文件编辑时,它vim
用来跟踪变化的。退出编辑文件时,vim
将自动丢弃相应的交换文件。因此,交换文件的存在以及您尝试写入原始文件的过程应该是考虑和采取适当措施的原因。
消息(E325: ATTENTION Found a swap file
)中呈现的两个场景实际上很常见:(1)另一个vim
程序正在编辑您正在尝试编辑的同一个文件(它实际上可能是另一个人 - 在这种情况下它真的没有意义只是盲目地删除交换文件 - 或者它可能是你在另一个终端窗口或标签中),或者(2)前一个vim
会话崩溃(最常见的情况是当你进行远程编辑时,网络会话被切断 - 其中如果vim会话没有正常退出,.swp
文件仍然落后;第二个场景的另一个例子是你不小心关闭了具有活动或后台vim
会话的终端窗口或选项卡。
当我遇到这条消息时,我首先考虑是否在另一个终端窗口或标签中编辑此文件,因为我通常使用多个终端窗口操作,每个终端窗口都有几个标签:
如果我意识到我正在另一个地方编辑,并且可以返回它,那么我按下这个附加会话的q
键,然后(Q)uit
通过原始vim
会话返回编辑。
有时如果我不完全确定,我(Q)uit
会跑去jobs
验证我是否vim
在完全相同的终端上运行; 如果什么都没有出现,我会跑去ps -ef | grep vim
检查我是否在vim
其他地方跑(即在另一个终端窗口或标签中)。关键是,我总是尝试通过原始vim
会话继续编辑。
如果我确定我无法返回原始编辑会话,并且仍然显示以下选项,那么我按下r
即可(R)ecover
。
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
按r
,您将看到如下消息:
Swap file ".notes.swp" already exists!
"notes" 18L, 46C
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Press ENTER or type command to continue
如果,在另一方面,我不再面对这些选择,因为我在shell提示符下,然后我跑vim
与-r
选项,如下所示:
vim -r notes
结果消息将类似:
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Press ENTER or type command to continue
无论哪种方式,按ENTER
继续,您将看到您的文件。
注意:如果Vim对它的内容有疑问,它会给出一条错误信息并插入带有“???”的行 在文中。如果在恢复时看到错误消息,请在文件中搜索“???” 看看有什么不对。您可能需要剪切和粘贴以获取所需的文本。
最常见的评论是“??? LINES MISSING”。这意味着Vim无法从原始文件中读取文本。如果系统崩溃并且未保存原始文件的某些部分,则会发生这种情况。
也就是说,我从未见过这些???
标记,所以这一定是非常罕见的。
接下来,将内容保存(即写入)到另一个文件(通常我只是将“2”附加到原始文件名的末尾):
:w notes2
接下来,强制退出此vim
会话:
:q!
接下来,比较两个文件:
diff notes notes2
如果diff
没有返回,则表示没有区别,并且删除交换文件和第二个文件是安全的:
rm .notes.swp notes2
此时,打开原始文件并继续,就像从未出现过问题一样:
vim notes
如果diff
返回某些内容,则表示原始文件(通过交换文件)发生了更改,由于恢复,已将其保存到第二个文件中。
由于在第二个文件中捕获了这些更改,因此您可以安全地删除交换文件并使用第二个文件覆盖原始文件:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
此时,打开原始文件并继续,就像从未出现过问题一样:
vim notes
这似乎很多工作,但是一旦你习惯了工作流程,最多需要20秒。