Journal / 2026 / AI技术
AssemblyForNeovim:在编辑器浮窗里看汇编
AssemblyForNeovim 把 C、C++、Rust 的汇编输出塞进 Neovim 浮窗,用本机编译器和项目真实的 compile_commands.json,全程不联网。本文讲清它与 Godbolt 的分工、安装与上手步骤,以及这个只有几十行说明的小插件目前缺什么。

目录 · 1896 字 / 4 分钟
2026 年 11 月 11 日的 Show HN 里,0xdeadf1sh 发布了 AssemblyForNeovim:在 Neovim 的浮动窗口里显示 C、C++、Rust 代码编译出的汇编。它的卖点不是「又一个 Godbolt」,而是不需要联网——用你本机已经装好的编译器生成。
这个区别听起来小,实际影响很大:代码不离开机器,编译参数来自项目本身,看到的就是你正在构建的那份产物,而不是网页上另配的一套工具链。
它怎么工作
- 普通模式下按
<leader>a,作用于光标所在的函数。 - 可视模式下按
<leader>a,或者直接执行:'<,'>Asm,作用于选中的行。 - 浮窗里用
+和-调整-O等级,按R重跑,按q关闭。 - 需要
PATH上有cc、c++,或者rustc、cargo;如果找到compile_commands.json就会用它,也就是能带上项目真实的 include 路径和编译参数。 - 全部本地:没有网络请求,也没有把代码发到第三方服务的路径。
README 很短,安装、用法、依赖三块写完就结束了。这既是它的优点——一眼能读完、没有隐藏行为——也是它的现状:没有测试、没有详细文档,遇到问题基本靠读代码。
与 Godbolt 工作流的差别
Godbolt(正式名字是 Compiler Explorer)解决的是「这段代码在某个编译器、某个架构、某个优化等级下会变成什么」。它强在编译器矩阵和可分享链接:换个编译器、换个目标架构、把链接发给同事,都是一步。
插件解决的是另一个问题:「我正在改这个函数,想立刻知道它变成了什么。」它强在零切换和真实构建参数,代价是你只有本机这一套工具链,看不到别的架构,也不方便把结果发给别人。
一个务实的分工是:探索「这段代码为什么慢」用插件,讨论「这个写法在 ARM 上会不会更差」用 Godbolt。两者不冲突,冲突的是把它们当成同一件事。
HN 讨论里还有人纠正命名:严格说应该叫 Compiler Explorer,Godbolt 是作者的名字。这个细节说明社区的默认叫法已经固化了,搜索时两个词都得试。
HN 讨论提到的替代
- nvim-dap-disasm:面向实际编译结果加调试器,适合看「运行时真正执行的那条指令」,而不只是静态输出。
- cargo-show-asm:Rust 生态里做得更久的工具,处理了不少边界情况,尤其是跨平台和符号处理。
- 还有人提到,自己更常在调试而不是开发时看汇编——这也划出了插件的适用边界:它服务的是写代码时建立直觉,不是替代调试器。
为什么参数比结果重要
同一段 C 代码,加不加 -DNDEBUG、开不开 -march=native、用 clang 还是 gcc,生成的汇编可能差出一大截。网页工具让你手动选这些开关,很容易漏掉项目里 define 的宏;插件直接读 compile_commands.json,看到的就是构建系统实际用的那套参数。这是它比「复制到网页」更可信的地方:你不是在近似项目,而是在看项目。
反过来,如果项目没有 compile_commands.json,这个优势就没了,插件退化成「用默认参数编译一段代码」,这时它和 Godbolt 的差距只剩切换成本。
上手
用 lazy.nvim 安装,配置只有一行:
{
"0xdeadf1sh/AssemblyForNeovim",
config = function()
require("asm").setup()
end,
}然后按顺序做几件事:
- 确认编译器在
PATH上;写 Rust 就要有rustc或cargo,缺一个都会在调用时报错。 - C/C++ 项目用 CMake 导出
compile_commands.json,或者用bear之类工具生成,放在项目根目录,插件会自动找到。没有它也能跑,但参数会退化成默认值。 - 打开一个函数,按
<leader>a看默认优化等级下的输出;再用+、-切换等级,观察循环展开、内联和寄存器分配的变化。 - 选中一段循环或一个小函数再看一次,比较「整函数」和「局部片段」的输出差异,这是最快建立直觉的方式。
- 如果结果和预期不符,先检查
compile_commands.json是否指向了你以为的那套参数,而不是怀疑插件。
一个值得养成的习惯:每次怀疑「编译器会不会优化掉这段」,先在这里看一眼,再决定要不要加 volatile、noinline 之类的标记。比凭印象争论快得多,尤其在读别人的数学库或加密代码时。
边界
- 项目很小:README 只有安装与用法两段,没有测试与详细文档,Issue 里的问题不一定有人回。
- 只支持 C、C++、Rust 三种语言;其他语言没有入口。
- 浮窗是展示用的,README 没有提到跳转、标注或与源码行的双向联动;它不替代调试器,也不替代性能分析。
- 「不需要联网」只描述插件本身;编译器、语言服务器、依赖下载仍然要网络。
- 汇编输出依赖本机编译器版本,同一个函数在不同机器上可能完全不同;拿它做性能结论前,要固定工具链版本。
本文基于以下公开报道整理。
参考来源
- 0xdeadf1sh/AssemblyForNeovim — GitHub(2026-11-11)
- Show HN: Godbolt-in-a-floating-window for Neovim (C, C++, Rust) — Hacker News(2026-11-11)
本文由 AI 辅助整理,事实来自项目 README 与 Hacker News 讨论;我们未在本地安装该插件,安装步骤与按键行为以 README 为准。
所属主题
Topics技术与工具 Tech & Tools


