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

如何恢复Vim中显示[converted]的不可读文件?

解决Vim中文件被错误转换导致乱码的问题

别担心,我来帮你恢复这个被错误转换的文件!先从你给出的:set输出里找线索:你开启了bomb选项,而且fileencodings优先检测ucs-bom(带BOM的UTF-8),这大概率是Vim错误识别了文件编码格式,导致打开时强制转换,出现乱码和[converted]标记。

下面是一步步的恢复操作:

第一步:立即退出,别保存!

现在你打开的是已经被错误转换的内容,绝对不要保存!执行以下命令强制退出Vim,保留原文件的原始状态:

:q!

第二步:用指定编码重新打开文件

重新打开时,我们要手动指定编码,同时跳过BOM检测,避免Vim再次错误转换。

尝试UTF-8无BOM格式

如果你的原文件是普通UTF-8(不带BOM),用这个命令打开:

:edit ++enc=utf-8 ++nobomb 你的文件名.cpp

这里++enc=utf-8告诉Vim用UTF-8解析文件,++nobomb让它忽略BOM检测,不会强行添加或识别BOM。

如果还是乱码,试试其他编码

如果上面的命令没用,可能原文件是其他编码,比如:

  • 西欧语言文件试试latin1:
    :edit ++enc=latin1 你的文件名.cpp
    
  • 中文文件试试gbk或gb2312:
    :edit ++enc=gbk 你的文件名.cpp
    

多试几种编码,直到文件能正常显示。

第三步:保存正确编码的文件

当文件正常显示后,我们要设置正确的编码参数并保存:

  1. 先关闭BOM标记,设置正确的文件编码:
    :set nobomb
    :set fileencoding=utf-8
    
    (如果你的原文件是其他编码,把utf-8换成对应的编码即可)
  2. 保存文件:
    :w
    

第四步:避免以后再出现这个问题

修改你的~/.vimrc文件,调整编码检测顺序,默认关闭BOM:

" 优先检测UTF-8无BOM,再检测带BOM的格式
set fileencodings=utf-8,ucs-bom,default,latin1
" 默认关闭BOM标记,除非你明确需要
set nobomb

为什么之前设置encoding没用?

因为你是在文件已经被错误加载后修改的encoding,这时候Vim只是改变当前缓冲区的显示编码,不会重新读取原文件。必须在打开文件时就指定正确的编码参数,才能让Vim正确解析原始内容。

内容的提问来源于stack exchange,提问作者Bajarang Sutar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:36:27