为何Vim会生成持续增大的.swp文件?
Vi/Vim 终端异常关闭后生成超大交换文件导致磁盘耗尽
问题场景
通过SSH打开vi/Vim,将大内容粘贴至缓冲区后,终端被关闭或崩溃,后续发现系统磁盘空间被完全耗尽。
相关案例
- 某用户使用Vim 8.0.1453版本,复制大文本导致控制台卡顿,强制关闭控制台后,几天后生成了数百GB的
.swp交换文件,两次遇到该问题都需手动定位并清理这些文件。 - 某Linux服务器磁盘耗尽,排查后发现是两个Vim交换文件占用了全部空间。
- 某用户打开一个仅100行的Python代码文件数天,删除文件并关闭运行Vim的终端后,几天后磁盘空间耗尽,最终找到
~/.vim/file.py.swap文件,其大小高达298GB。
原因分析
Vim的交换文件(.swp)用于异常退出时恢复编辑内容,当终端异常关闭时,Vim进程可能未正确终止,反而在后台持续写入交换文件——尤其是粘贴大内容到缓冲区后,进程可能陷入异常循环,不断向交换文件写入数据,最终耗尽磁盘空间。
解决方案
- 紧急清理:使用
find / -name "*.swp" -type f -size +1G快速定位超大交换文件,确认无需要恢复的内容后,执行rm -f 目标swp文件路径删除。 - 提前预防:
- 编辑大文件时禁用交换文件:启动Vim时加参数
vim -n filename,或在.vimrc中添加set noswapfile配置。 - 坚持正常退出Vim:使用
:q/:wq等命令退出,避免直接关闭终端。 - 定期清理交换文件:添加定时任务,自动清理超过指定大小或创建时间过久的
.swp文件。
- 编辑大文件时禁用交换文件:启动Vim时加参数
- 残留进程处理:终端关闭后,用
ps aux | grep vim检查是否有残留Vim进程,如有则执行kill -9 进程ID强制终止。
内容的提问来源于stack exchange,提问作者Cireo
相关产品推荐
相关产品推荐

