sim 与 Vim、Neovim、Helix 对比
Vim、Neovim 和 Helix 都是成熟而强大的编辑器,而 sim 是新的。这张表只涵盖能对照一手资料核实的内容:各编辑器自己的文档、CVE 条目、发布说明和 issue 跟踪器。来源没有说的,表里也不写。
核查于 2026-10-17。当时的最新版本:Vim 9.2.1202、Neovim 0.12.6、Helix 25.07.1。
| 主题 | Vim | Neovim | Helix | sim |
|---|---|---|---|---|
| 扩展系统 | Vim script 和软件包(packages)。[1] | Lua,以及 Vim script 插件。[2] | 已发布版本中没有插件系统。基于 Scheme(Steel)的插件系统是一个尚未关闭的草稿拉取请求(#8675,2026-10-09 更新)。最新版本是 25.07.1(2025 年 7 月)。[3] [4] | 没有,这是有意为之:插件在它“不会构建的东西”清单上。 |
| modeline(文件中的设置) | 默认开启(root 下关闭)。自补丁 9.2.0350(2026 年 4 月)起,modeline 只能设置一小部分选项('modelinestrict',默认开启)。过去的 CVE:CVE-2019-12735、CVE-2026-34982。[5] [6] [7] [8] | 默认开启(root 下关闭);'modelineexpr' 为关闭。手册建议在编辑不受信任的文本之前禁用 modeline。CVE-2019-12735 在 0.3.6 中修复。[9] [7] | 不解析 modeline:相关请求(#729)尚未关闭,一个拉取请求(#7788)被关闭且未合并。[10] [11] | 从不读取。设置和命令不来自文件内容。 |
| 项目本地配置 | 'exrc' 默认关闭。手册把开启它称为“a potential security leak”(潜在的安全泄露),并写道“BETTER NOT SET THIS OPTION!”(最好不要设置这个选项!)。[5] | 'exrc' 默认关闭。开启后,.nvim.lua、.nvimrc 和 .exrc 只有在文件位于信任列表中(:trust)时才会运行。[9] | 会从工作区加载 .helix/config.toml(25.07.1 的文档中有记载)。会先询问的工作区信任(PR #15177,2026 年 3 月合并)在开发分支上,尚未进入任何发布版本。[12] [13] [14] [3] | 没有配置文件,也没有可加载的项目本地配置。 |
| 双向控制字符(U+202E 等) | 显示为 <202e>:手册称不可打印字符和零宽 Unicode 字符显示为 <xxxx>,并且对不可打印字符使用 SpecialKey 高亮。[5] | 以 SpecialKey 高亮显示为 <202e>、<2066> 等(在我们的测试中,默认配色方案下为青色):U+200B–200F、U+202A–202E、U+2060–206F 和 U+FEFF 都在它的不可打印字符表中。[9] [15] | 25.07.1 版本中没有可见的标记(在我们的测试中,它们占一个空白单元格)。零宽字符是一个尚未关闭的 issue(#11255),控制字符会被原样写入终端(#16320,尚未关闭)。[16] [17] [3] | 在任何状态下都以品红色块显示 <U+202E>,绝不原样发送。字面文本 <U+202E> 没有色块。 |
| 被另一个进程改动的文件 | 记住文件的时间戳、权限和大小,不一致时发出警告(在 shell 命令之后、在 GUI 获得焦点时,以及通过 :checktime 检查);'autoread' 会重新载入你没有改动过的缓冲区。[18] | 同样的检查和警告;'autoread' 会重新载入你没有改动过的缓冲区。[19] | 写入会被拒绝,并提示“file modified by an external process, use :w! to overwrite”(文件已被外部进程修改,请使用 :w! 覆盖)(在 #6492 中被引用)。自动重新载入是一个尚未关闭的请求(#1125)。[20] [21] | 监视打开的文件,在文本、标签页和文件树中标出改动之处,并在保存前比较文件的哈希;如果文件已变化,就不写入任何内容。在与该检查同一时刻发生的写入,仍可能漏过。 |
sim:项目自己的规格(README.md、SPEC.md、sim/SPEC.md、sim/CONCEPT.md)。
核查方法
文档固定在最新的发布标签上。issue 和拉取请求引用的是上面所列日期当天的状态,这些状态之后可能变化。表中写有“在我们的测试中”的地方,是我们在所指定的版本中打开了一个含有真实 U+202E 的文件,并观察了它的绘制结果;这一点来源本身无法替我们说明。如果这里有任何过时或错误之处,应当予以更正。
来源
- Vim 9.2.1202, runtime/doc/repeat.txt (packages, recording)
- Neovim, Lua guide
- Helix 25.07.1 release (the latest, July 2025)
- Helix PR #8675: Add Steel as an optional plugin system (draft, open)
- Vim 9.2.1202, runtime/doc/options.txt ('modeline', 'modelinestrict', 'exrc', 'isprint', 'fsync')
- Vim patch 9.2.0350: Enabling modelines poses a risk ('modelinestrict')
- NVD: CVE-2019-12735 (Vim before 8.1.1365 and Neovim before 0.3.6, modeline)
- NVD: CVE-2026-34982 (Vim before 9.2.0276, modeline sandbox bypass)
- Neovim 0.12.6, runtime/doc/options.txt ('modeline', 'modelineexpr', 'exrc', 'isprint', 'fsync')
- Helix issue #729: Vim modeline parsing (open)
- Helix PR #7788: add basic modeline support (closed, not merged)
- Helix 25.07.1, book/src/configuration.md (a config.toml local to a project)
- Helix PR #15177: Add workspace trust support (merged 2026-03-26)
- Helix development branch, book/src/workspace-trust.md
- Neovim 0.12.6, src/nvim/mbyte.c (utf_printable)
- Helix issue #11255: Substitute unprintable characters in a buffer (open)
- Helix issue #16320: C0 control characters are written raw (open)
- Vim 9.2.1202, runtime/doc/editing.txt (timestamps)
- Neovim 0.12.6, runtime/doc/editing.txt (timestamps, 'autoread')
- Helix issue #6492: make the “file modified by an external process” message louder
- Helix issue #1125: automatic reload when file changes externally (open)
- sim, NOTES.md at commit d3caae2: “Hidden characters in Neovim 0.12.5, measured against sim” (2026-10-18)
- The Unicode Standard 18.0, chapter 23, Special Areas and Format Characters (§23.4 Variation Selectors, §23.9 Tag Characters)
- Unicode Technical Standard #51: Unicode Emoji, revision 31 (ZWJ sequences, emoji tag sequences, Annex C)
- Johann Rehberger, ASCII Smuggler Tool: Crafting Invisible Text and Decoding Hidden Codes (Embrace The Red, 14 January 2024)
- Endor Labs, Invisible Threats and the Blind Spots of Security (an analysis of GlassWorm)
- Neovim, LSP client
- Helix README (features)

