如何解决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
相关产品推荐
相关产品推荐

