You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Vim恢复swap file时出现的"not usable on this computer"错误?

如何解决Vim恢复swap file时出现的"not usable on this computer"错误?

上周我第一次碰到这个问题,差点被逼疯:用vim -r列出交换文件时,其中一个文件后面跟着[not usable on this computer]的提示,尝试恢复时Vim直接拒绝操作并退出。谷歌搜了一圈没找到有用的方案,我硬生生花了6小时啃Vim源码、拆解交换文件格式、用十六进制编辑器逐字节对比修改,终于把问题搞定了——现在我对Vim内部机制的了解,真的是远超预期,必须把这个解决方案分享出来!

问题根源

Vim的交换文件(.swp)里存储了创建该文件时的系统标识信息,包括主机名、用户名和设备ID(比如磁盘的UUID)。当你在另一台电脑、不同用户环境甚至是重新挂载过的磁盘上尝试恢复时,Vim会校验这些信息,如果不匹配,就会抛出这个“不可用”的错误。

解决步骤

要绕过这个校验,我们需要修改交换文件里的系统标识,让它匹配当前环境:

  • 查看当前环境的合法标识信息
    打开终端,执行以下命令获取当前的主机名、用户名和设备ID:

    # 获取主机名
    hostname
    # 获取当前用户名
    whoami
    # 获取当前存储设备的ID(以Linux为例,替换成你的文件所在分区路径)
    blkid | grep /dev/sda1
    

    嫌命令麻烦的话,也可以生成一个临时交换文件来提取信息:新建空文件test.txt,用Vim打开后按Ctrl+Z强制退出,然后用十六进制编辑器打开生成的.test.txt.swp,文件开头的几个字段就是当前环境的合法标识。

  • 用十六进制编辑器修改目标交换文件
    打开你需要恢复的.swp文件(比如myfile.txt.swp),定位到以下字段:

    • 主机名字段:文件开头后不久,是以空字符\0结尾的字符串
    • 用户名字段:紧跟主机名之后,同样以空字符结尾
    • 设备ID字段:一般是16字节的二进制数据(对应磁盘UUID)
      将这些字段替换成你刚才获取的当前环境信息,保存修改。
  • 尝试恢复文件
    现在执行vim -r myfile.txt,Vim应该会正常识别交换文件,允许你进行恢复操作了。

注意事项

  • 修改前一定要备份原交换文件,避免操作失误导致数据彻底丢失
  • 如果是同一台电脑但不同用户下出现错误,通常只需要修改用户名和主机名字段,设备ID可以不用改动

备注:内容来源于stack exchange,提问作者Braden Best

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:13:05