VIM打开HTML5文件显示HTML4 DOCTYPE的原因及解决方法
问题原因
这不是Vim读取异常,恰恰是Vim显示了磁盘上存储的文件真实内容,你在TextEdit里看到的原始代码是TextEdit给你展示的经过自身处理的视图,不是文件实际存储的内容。
问题根源是Mac自带TextEdit的默认富文本逻辑:当你在默认配置的TextEdit里输入HTML代码并保存时,TextEdit不会直接把你输入的纯文本存成文件,而是调用系统Cocoa框架的富文本导出能力,把你输入的内容当成富文本内容,自动生成一份带内置样式、固定用HTML4.01 DTD的HTML文件写入磁盘。你在Vim里看到的<meta name="Generator" content="Cocoa HTML Writer">标签就是这个转换过程留下的明确标记。
TextEdit自己打开这份被转换过的文件时,会自动把Cocoa生成的富文本HTML反向渲染成类似你当初输入的纯代码样式,所以你会误以为文件没被改动,实际上磁盘上的文件早就被改写了。
解决方法
- 先修复已损坏的文件:用Vim或者其他纯文本编辑器打开文件,删掉所有Cocoa自动生成的冗余内容,重新写入原始HTML5代码后保存即可。
- 修改TextEdit默认配置避免后续再出问题:
- 打开TextEdit,点击顶部菜单栏「TextEdit」-「设置」
- 在「新建文稿」栏,将默认格式从「富文本」切换为「纯文本」
- 切换到「打开和存储」栏,取消勾选「存储HTML文件时使用HTML 4.01兼容格式」,同时勾选「将HTML文件显示为HTML代码而非渲染的富文本」
- 更稳妥的方案:编写代码类纯文本文件时,不要使用默认配置的TextEdit,优先选择专门的代码编辑器(比如VS Code、Sublime Text)或者终端下的Vim/NeoVim,这类工具不会在你不知情的情况下自动改写文件内容。
- 校验文件正确性:保存文件后,可以在终端执行
cat 你的文件路径.html,如果终端输出的内容和你编写的原始代码完全一致,就说明文件存储正常,在所有工具中打开都会保持原始状态。
额外注意:不要把.html后缀文件的默认打开方式设为默认配置的TextEdit,否则双击打开时如果误触保存,文件会再次被自动转换为Cocoa富文本格式。
内容的提问来源于stack exchange,提问作者Nancy
相关产品推荐
相关产品推荐

