.swp 文件

273 阅读3分钟

今天在终端使用命令 vim ~/.bash_profile ,报错了,从未遇到过的情况。

E325:ATTENTION
Found a swap file by the name ".bash_profile.swp"

~/ 目录中 ls -a 发现有 .bash_profile.swp 这么个文件。

【.swp】是什么文件?

.swp】文件是vim/vi的临时文件,是个.开头的隐藏文件\color{deeppink}{【.swp】文件是 vim/vi 的临时文件,是个.开头的隐藏文件}

vim在编辑文件时,会创建一个 【临时交换文件swapfile\color{orange}{【临时交换文件 swap-file】} 用来备份缓冲区中的内容,以保证文件的安全性。
这是 vim 的一种保护机制。

如果被编辑的原文件名是 abcd,那么swp文件名就是 【.abcd.swp】
若文件的编辑是正常退出的,则此swp文件自动删除。

注意,如果并没有对文件进行修改,而只是读取文件,是不会产生swp文件的。

当使用 vim 打开 xxx 文件时,如果存在 xxx 对应的 swp临时文件,就会出现开头的报错以及一些提示。

出现【.swp】文件提示的常见原因:

  • vim异常退出,没有正常关闭文件
  • 系统崩溃或断电导致vim未正常关闭
  • 同一文件被多个用户或多个vim实例同时编辑

vim 非正常退出时,并不会覆盖旧的交换文件,而是会重新生成新的交换文件。 而原来的文件中并不会有这次的修改,文件内容还是和打开时一样。

例如,第一次产生的交换文件名为【.data.swp】。
再次意外退出后,将会产生名为【.data.swo】的交换文件。
而第三次产生的交换文件则为【.data.swn】,依此类推。

如何处理【.swp】文件提示?

当遇到【.swp】文件提示时,vim 会给出几个选项:

  • [O]pen Read-Only:以只读模式打开文件
  • [E]dit anyway:直接编辑文件,忽略.swp文件
  • [R]ecover:尝试恢复上次未保存的内容
  • [D]elete it:删除.swp文件
  • [Q]uit:退出vim
  • [A]bort:中止操作

选择合适的选项取决于具体情况:

  • 若确定没有其他人在编辑该文件,可以选择[E]dit anyway
  • 若需要恢复上次未保存的内容,选择[R]ecover
  • 若确定【.swp】文件已不需要,可以选择[D]elete it

也可以直接删除【.swp】文件

rm -f .xxx.swp

删除swp临时文件后,再次 vim 文件,就不会再弹出这个提示了

swp相关设置


#查看当前目录下的所有swp文件
vim -r


#不想vim产生交换文件,可以使用如下命令禁止
:set noswapfile


#也可以使用以下命令,对生成的交换文件进行设置:
:set swapfile


#使用以下命令来恢复文件,这样上次意外退出没有保存的修改,就会覆盖文件。
#然后用rm 命令删除交换文件。不然每一次编辑时总是有这个提示。
vim -r filename
rm .{filename}.swp


#根据默认设置,交换文件会每隔 4000毫秒(4秒)或者200个字符保存一次。
#可以使用以下命令,修改保存交换文件的频率:
:set updatetime=2000
:set updatecount=400
#注意,如果将 updatecount 的值设为0,那么就将不保存交换文件。


#vim默认在当前文件所处的目录下产生交换文件
#可以通过 directory 选项来更改交换文件产生的目录。
#例如,使用以下命令将交换文件存放在 /tmp 目录下
:set directory=/tmp
#注意,如果将交换文件存储在一个指定目录,那么当编辑不同目录下相同名称的文件时,就会产生命名冲突。
#可以将 directory 选项设置为一个以逗号分隔的目录列表,并将当前目录(.)设为目录列表的第一个选项,这样交换文件首先会被存放在当前目录下。