今天在终端使用命令 vim ~/.bash_profile ,报错了,从未遇到过的情况。
E325:ATTENTION
Found a swap file by the name ".bash_profile.swp"
在 ~/ 目录中 ls -a 发现有 .bash_profile.swp 这么个文件。
【.swp】是什么文件?
vim在编辑文件时,会创建一个
用来备份缓冲区中的内容,以保证文件的安全性。
这是 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 选项设置为一个以逗号分隔的目录列表,并将当前目录(.)设为目录列表的第一个选项,这样交换文件首先会被存放在当前目录下。