当我打开包含 .swp 文件的文件时,如何消除烦人的警告?或者,我如何根本不生成 .swp 文件?警告示例:
E325: ATTENTION
Found a swap file by the name ".notes.swp"
owned by: james dated: Fri Dec 3 17:38:07 2010
file name: ~james/school/se/project-dir/rottencucumber/doc/notes
modified: no
user name: james host name: james-laptop
process ID: 2251 (still running)
While opening file "notes"
dated: Fri Dec 3 18:46:10 2010
NEWER than swap file!
(1) Another program may be editing the same file.
If this is the case, be careful not to end up with two
different instances of the same file when making changes.
Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r notes"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".notes.swp"
to avoid this message.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
答案1
如果你关心没有输您可能尚未保存的文本。它应该不是被认为是令人讨厌的,并且应该不是导致您匆忙删除交换文件或配置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 秒。
答案2
粘贴的消息表明您仍然在另一个 Vim 会话中打开了“notes”文件。编辑正在其他地方编辑的文件绝对不是一个好主意。
如果该消息是错误的,您需要确定您的 Vim 会话是如何不正常退出的,并避免将来再发生这种情况。
至于恢复,这可能是一个问题,因为“notes”比与其关联的 Vim .swp 文件新,但您仍然可以尝试。只需确保先将“notes”文件复制到备份位置即可。
通读“ :help recover.txt
”将是一个好主意。
这里的教训是,您不应该看到此消息,这意味着某个地方出了问题。这(可能)不是 Vim 的错。
如果此时你仍然坚决不让 Vim 创建 .swp 文件,以便你可以从崩溃和其他相关问题中恢复,你可以set noswapfile
在 中输入“ ” ~/.vimrc
。
答案3
您可以使用 -n 来不使用交换文件打开 vim:
要一直这样做,只需
alias vim='vim -n'
在你的 .bashrc 或 .bash_aliases 文件中
如果你需要运行不带 -n 选项的 vim,只需运行
\vim
答案4
当您正确退出时,vim 将删除生成的 .swp 文件。