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)為基礎的外掛系統是一個尚未關閉的草稿 pull request(#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)尚未關閉,一個 pull request(#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 與 pull request 引用的是上方所列日期當天的狀態,這些狀態之後可能改變。表中寫有「在我們的測試中」的地方,是我們在所指定的版本中開啟了一個含有真實 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)

