为什么 Vim 创建一个不断增长的 .swp 文件?

问题描述 投票:0回答:1

有人通过 ssh 打开

vi
,并将输出粘贴到缓冲区中,然后关闭/崩溃了该终端。后来发现系统没有磁盘了。

自我回答。

之前未解决的报告,通常没有回应或嘲笑回应:

https://groups.google.com/g/vim_dev/c/RRJOfwOXtlA?pli=1

我一直在 Linux 上使用 vim,发现创建巨大的 swp 文件会占用所有硬盘空间的问题。 如果您打开 vim 并复制可能导致 Linux 控制台挂起的大文本,然后强制关闭控制台,几天后 swp 文件大小可能会达到数百 GB。我已经遇到过这个问题两次,每次我都必须查找这些 swp 文件是在哪个目录中创建的。 我使用的是 vim 版本 8.0.1453。

https://www.reddit.com/r/vim/comments/8oy57j/issue_about_huge_swp_file_cause_disk_full/

今天,我的一个 linux 服务器磁盘满了,我发现两个 vim 交换文件导致了这个问题

https://www.reddit.com/r/vim/comments/86ny08/cause_of_300gb_swap_file_oo/

我有一个文本文件(python 代码,可能有 100 行)打开了几天,然后将其删除(并且在某个时候关闭了保存它的 vim 终端)。 你瞧,几天后,我的空间不足了,并追踪到问题 ~/.vim/file.py.swap 占用了高达 298GB 的磁盘空间

vim diskspace swapfile
1个回答
0
投票

我对“粘贴到缓冲区”的直接怀疑是它不是在插入模式下完成的,这触发了一些重复的命令被执行。

我可以通过打开一个新文件并输入类似的命令来快速重现此问题

  • 100000iA<esc>
    (创建一条长线)
  • yy10000000p
    (粘贴很多次) 我通过保存部分版本做了一些其他的探索,因此可能会有更多的复制内容(我不打算复制,见下文)。

观察到以下行为

  1. .swp
    文件增长得相当快(~5GB/秒)
  2. vim
    进程无法终止,即使是
    sudo kill -9
    (osx)
    1. 有一个插件子进程也是不可杀死的
    2. 关闭终端持有
      vi
      没有任何反应
    3. 尝试启用
      Full Disk Access
      ,但没有帮助
    4. 没有禁用
      System Integrity Protection
    5. 正常重启已解决
  3. 删除
    .swp
    文件
    1. 这似乎只能阻止它
    2. 几分钟后
      .swp
      文件返回(仍在增长)

版本信息

VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Sep 01 2022 15:00:53)
macOS version - x86_64
Included patches: 1-350
© www.soinside.com 2019 - 2024. All rights reserved.