hex editor 本身不损坏文件,但与 prettier、tailwind css、python 扩展等共存时,因保存钩子劫持或编码重解释(如将二进制当 utf-8 处理),会导致静默保存失败或不可逆损坏;应禁用格式化、关闭 autoguessencoding、排除二进制路径并校验哈希。

Hex Editor 插件本身不会损坏文件,但和某些扩展共存时,会在你完全没意识到的情况下让保存操作静默失败、或把二进制当文本重编码——这两种情况都会导致文件损坏。关键不是“卸载谁”,而是切断那几个具体冲突链。
为什么装了 Hex Editor 还会把 .bin 文件存坏
最常见原因:另一个插件劫持了保存流程,或者 VS Code 自身的编码逻辑被干扰。比如 Prettier、Auto Rename Tag、甚至某些语言服务(如 Python 扩展)会在文件保存前触发格式化钩子,而它们根本不认识十六进制视图,强行对字节流做 UTF-8 编码转换,00 FF A5 就可能变成乱码字符串再写回磁盘。
- 检查右下角状态栏是否显示
Save with Encoding按钮 —— 如果点了它(哪怕只是手滑),选了 UTF-8/GBK 等任何编码,就等于把整个二进制数组当字符串重新 encode,文件立刻不可逆损坏 - 打开命令面板(
Ctrl+Shift+P),输入Developer: Toggle Developer Tools,切到 Console 标签页,保存时观察是否有Failed to save file: Error: ENOENT或Extension host terminated类报错 —— 这是插件冲突的直接证据 - 临时禁用所有非必要扩展:运行
code --disable-extensions启动 VS Code,再用 Hex Editor 打开并修改保存同一个 .bin 文件。如果这次能正常保存,说明冲突确实来自某个扩展
哪些扩展和 Hex Editor 最容易打架
不是所有扩展都危险,但以下几类在保存、编码、文件监听环节有高概率干预 Hex Editor 的原位写入行为:
-
esbenp.prettier-vscode:Prettier 默认监听所有文件类型,一旦启用 “Format on Save”,它会在 Hex Editor 保存前尝试解析字节流为 JS/JSON,失败后可能覆盖原始内容 -
bradlc.vscode-tailwindcss:Tailwind 的 CSS-in-JS 解析器有时会扫描整个工作区文件,包括 .bin,触发错误的文件读取和缓存污染 -
ms-python.python:Python 扩展的后台语言服务器(Pylance)会对工作区所有文件建立索引,遇到无扩展名或 .dat/.sav 文件时可能锁定句柄,导致 Hex Editor 保存时 Permission denied -
ritwickdey.LiveServer:Live Server 启动后会监听文件变更并自动刷新,若它同时监控了你正在编辑的固件目录,可能造成写入竞争
真正有效的隔离方案,不是卸载而是精准屏蔽
与其全量禁用或删扩展,不如用 VS Code 提供的细粒度控制把冲突掐死在萌芽阶段:
- 在
settings.json中加这一行,禁止 Prettier 处理二进制文件:"prettier.disableLanguages": ["plaintext", "binary"] - 关闭所有格式化钩子:
"editor.formatOnSave": false(Hex Editor 场景下本就不该格式化) - 显式排除二进制路径:在工作区根目录建
.vscode/settings.json,加入"files.exclude": {"**/*.bin": true, "**/*.dat": true, "**/*.sav": true},避免语言服务扫描它们 - 最关键的一步:确认
files.autoGuessEncoding是false—— 否则 VS Code 仍会偷偷对文件头做编码推测,干扰 Hex Editor 的原始字节呈现
保存失败却不报错?这是 Hex Editor 最危险的默认行为
Hex Editor 不会弹窗警告保存失败,也不会在状态栏标红。它只依赖两个信号判断是否可写:右下角是否为 Hex Editor (Edit),以及文件系统权限是否允许写入。只要其中任一条件不满足,Ctrl+S 就是空操作,而你根本不知道。
- 每次编辑前,务必点击右下角
Readonly切换为可编辑模式;改完看标题栏右侧是否有 ● 圆点 —— 那是唯一表示“有未保存更改”的视觉提示 - 永远先备份:
cp firmware.bin firmware.bin.bak(Linux/macOS)或复制粘贴一份(Windows),别信“我只改一个字节” - 改完立即校验:
shasum -a 256 firmware.bin(macOS/Linux)或certutil -hashfile firmware.bin SHA256(Windows),比对前后哈希值,差一个字节都算失败 - 大文件(>50MB)别硬扛:Hex Editor 内存加载机制不支持 mmap,卡死是必然。用
xxd -l 4096 yourfile.bin | grep -A3 -B3 "DEAD"定位后再跳转编辑
真正的风险不在插件本身,而在 VS Code 把“文本编辑”和“二进制编辑”混在同一套生命周期里——它没有独立的二进制文件事件总线,所有钩子都是共享的。所以每次保存前多看一眼右下角状态、多敲一次哈希校验,比纠结哪个插件该卸载要实在得多。











