如何恢复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
多试几种编码,直到文件能正常显示。
第三步:保存正确编码的文件
当文件正常显示后,我们要设置正确的编码参数并保存:
- 先关闭BOM标记,设置正确的文件编码:
(如果你的原文件是其他编码,把:set nobomb :set fileencoding=utf-8utf-8换成对应的编码即可) - 保存文件:
: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
相关产品推荐
相关产品推荐

