sim と Vim・Neovim・Helix の比較

Vim、Neovim、Helix は成熟した高機能なエディタで、sim は新しいエディタです。この表で扱うのは、一次情報(各エディタ自身のドキュメント、CVE エントリ、リリースノート、イシュートラッカー)で確かめられることだけです。出典が語らないことは、表にも書いていません。

2026-10-17 時点で確認。そのときの最新リリース: Vim 9.2.1202、Neovim 0.12.6、Helix 25.07.1。

項目VimNeovimHelixsim
拡張の仕組みVim script とパッケージ。[1]Lua と Vim script のプラグイン。[2]リリース版にはプラグインの仕組みがない。Scheme(Steel)によるプラグインの仕組みは、ドラフトのプルリクエストとして未マージ(#8675、2026-10-09 更新)。最新リリースは 25.07.1(2025 年 7 月)。[3] [4]意図的に持たない。プラグインは「作らないもの」のリストに入っている。
モードライン(ファイル内の設定)既定でオン(root ではオフ)。パッチ 9.2.0350(2026 年 4 月)以降、モードラインから設定できるオプションは短いリストに限られる('modelinestrict'、既定でオン)。過去の CVE: CVE-2019-12735、CVE-2026-34982。[5] [6] [7] [8]既定でオン(root ではオフ)。'modelineexpr' はオフ。マニュアルは「信頼できないテキストを編集する前にモードラインを無効にせよ」と述べる。CVE-2019-12735 は 0.3.6 で修正。[9] [7]モードラインは解釈しない。要望(#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 では目に見える印がない(私たちの検証では空白 1 マスになった)。ゼロ幅文字は未解決のイシュー(#11255)で、制御文字は端末にそのまま書き出される(#16320、未解決)。[16] [17] [3]どんな状態でも、マゼンタのブロックの <U+202E>。端末にはそのまま送らない。文字列としての <U+202E> にはブロックがつかない。
別のプロセスによるファイルの変更編集を始めたときのファイルのタイムスタンプ、モード、サイズを覚え、変わっていれば警告する(シェルコマンドの実行後、GUI ではフォーカス復帰時、:checktime で確認)。'autoread' は、変更していないバッファを再読み込みする。[18]同じ確認と警告。'autoread' は、変更していないバッファを再読み込みする。[19]書き込みは「file modified by an external process, use :w! to overwrite」で拒否される(#6492 での引用)。自動再読み込みは未解決の要望(#1125)。[20] [21]開いているファイルを監視し、本文・タブ・ツリーに変更箇所の印をつけ、保存の前にファイルのハッシュを比べる。変わっていれば何も書き込まない。確認と同じ瞬間の書き込みは、すり抜ける可能性があります。

sim: プロジェクト自身の仕様(README.md、SPEC.md、sim/SPEC.md、sim/CONCEPT.md)。

見えない文字の実測

何も描かない文字や、端末に作用する文字の種類ごとに、その文字を入れた小さなファイルを端末で開いたとき、Neovim 0.12.5 と sim が何を表示したかをまとめました。測ったのは Neovim だけなので、この表に載る他のエディタは Neovim だけです。

測定日は 2026-10-18。Neovim 0.12.5(nvim --clean)と、コミット d3caae2 の sim です。このコミットは sim 0.2.0 に入っています。最新リリースの Neovim 0.12.6 は測っていません。[22]

文字の種類Neovim 0.12.5sim
U+200B ゼロ幅スペース<200b><U+200B>
文字と文字のあいだの U+200D ゼロ幅ジョイナー印なし<U+200D>
Trojan Source: U+202E、U+2066、U+2069<202e> <2066> <2069><U+202E> <U+2066> <U+2069>
タグ文字(ASCII スマッグリング)印なし<U+E0049> …
文字の後ろの異体字セレクタ(U+FE00–FE03、U+E0155 など)印なし<U+FE00> … <U+E0155> …
漢字の後ろの、字形を指定する異体字セレクタ印なし葛<U+E0100>
ハングルのフィラー U+3164、U+115F、U+FFA0印なし<U+3164> <U+115F> <U+FFA0>
ソフトハイフン U+00AD と結合書記素連結子 U+034F印なし<U+00AD> <U+034F>
ワードジョイナー U+2060<2060><U+2060>
行区切り U+2028印なし<U+2028>
未割り当て U+0378、非文字 U+FDD0印なし<U+0378> <U+FDD0>
非文字 U+FFFF<ffff><U+FFFF>
ファイル途中の U+FEFF<feff><U+FEFF>
ESC と DEL^[ ^?^[ ^?
C1 制御文字 U+0085<85><U+0085>
私用領域(Nerd Font のアイコン)そのままそのまま
ジョイナーとセレクタのある絵文字、キーキャップ、イングランドの旗そのままそのまま

sim が表示する 15 種類のうち、Neovim が印をつけたのは 7 種類で、8 種類は印なしで描きました。[23] [24] [25] [26]

「印なし」は、端末にその文字そのものが送られ、エディタが何も印をつけなかったことを示します。「そのまま」は、両方があえて手を加えない場合です(Nerd Font のアイコン、絵文字の連なり)。ほかのセルは、その文字の代わりに描かれたものです。

sim の列は、コミット d3caae2 の sim です。 ファイル、コマンド、各行は、そのコミットの sim の NOTES.md に書いてあります。

sim で開いた小さな Rust ファイル。タグ文字に隠した指示、異体字セレクタに隠したペイロード、双方向制御文字、ハングルのフィラー、ソフトハイフン、ゼロ幅スペースが、それぞれマゼンタのブロックの上に <U+202E> のような見える形で描かれている。
sim、同じファイル。隠れた文字はすべて、マゼンタのブロックの上の見える <U+XXXX> になります。
Neovim 0.12.5 で開いた同じファイル。タグ文字、異体字セレクタ、フィラー、ソフトハイフンはまったく描かれず、双方向制御文字とゼロ幅スペースだけが <202e> や <200b> として見える。
Neovim 0.12.5、同じファイル。タグ文字とセレクタが描かれないので、ペイロードの行は "a"; と読め、1 行目は無害なコメントに読めます。描かれるのは <202e>、<2066>、<2069>、<200b> だけです。

同じ測定からわかる、sim のやり方の代償です。表示した文字はその形の桁数を使うので(4 桁のコードなら 8 桁、5 桁なら 9 桁)、多くあると行が長くなります。漢字の後ろの字形を指定する異体字セレクタは表示されます。そして、この表示はオフにできません。

他のエディタが、まだ優れている点

sim は、幅広さと引き換えに、固定された、確かめられる振る舞いを選びました。次のどれかがいま必要なら、他のエディタを使ってください。

  • Neovim と Helix には言語サーバーのクライアントがあります。sim にはまだなく、サンドボックスつきのものを予定しています。[27] [28]
  • Vim と Neovim は、パッケージやプラグインで拡張できます。sim はプラグインを提供しません。[1] [2]
  • Vim と Neovim はマクロを記録して再生できます。sim にはまだマクロがなく、予定しています。レジスタとマークは sim 0.2.0 にあります。[1]

確認の方法

ドキュメントは、最新リリースのタグに固定しています。イシューとプルリクエストは上の日付時点の状態で引用しており、状態は変わりえます。「私たちの検証では」と書いた箇所は、名前を挙げたリリースで、実際の U+202E を含むファイルを開き、描画されたものを確かめたものです。出典だけでは言えないことです。ここに古い点や誤りがあれば、訂正されるべきです。

出典

  1. Vim 9.2.1202, runtime/doc/repeat.txt (packages, recording)
  2. Neovim, Lua guide
  3. Helix 25.07.1 release (the latest, July 2025)
  4. Helix PR #8675: Add Steel as an optional plugin system (draft, open)
  5. Vim 9.2.1202, runtime/doc/options.txt ('modeline', 'modelinestrict', 'exrc', 'isprint', 'fsync')
  6. Vim patch 9.2.0350: Enabling modelines poses a risk ('modelinestrict')
  7. NVD: CVE-2019-12735 (Vim before 8.1.1365 and Neovim before 0.3.6, modeline)
  8. NVD: CVE-2026-34982 (Vim before 9.2.0276, modeline sandbox bypass)
  9. Neovim 0.12.6, runtime/doc/options.txt ('modeline', 'modelineexpr', 'exrc', 'isprint', 'fsync')
  10. Helix issue #729: Vim modeline parsing (open)
  11. Helix PR #7788: add basic modeline support (closed, not merged)
  12. Helix 25.07.1, book/src/configuration.md (a config.toml local to a project)
  13. Helix PR #15177: Add workspace trust support (merged 2026-03-26)
  14. Helix development branch, book/src/workspace-trust.md
  15. Neovim 0.12.6, src/nvim/mbyte.c (utf_printable)
  16. Helix issue #11255: Substitute unprintable characters in a buffer (open)
  17. Helix issue #16320: C0 control characters are written raw (open)
  18. Vim 9.2.1202, runtime/doc/editing.txt (timestamps)
  19. Neovim 0.12.6, runtime/doc/editing.txt (timestamps, 'autoread')
  20. Helix issue #6492: make the “file modified by an external process” message louder
  21. Helix issue #1125: automatic reload when file changes externally (open)
  22. sim, NOTES.md at commit d3caae2: “Hidden characters in Neovim 0.12.5, measured against sim” (2026-10-18)
  23. The Unicode Standard 18.0, chapter 23, Special Areas and Format Characters (§23.4 Variation Selectors, §23.9 Tag Characters)
  24. Unicode Technical Standard #51: Unicode Emoji, revision 31 (ZWJ sequences, emoji tag sequences, Annex C)
  25. Johann Rehberger, ASCII Smuggler Tool: Crafting Invisible Text and Decoding Hidden Codes (Embrace The Red, 14 January 2024)
  26. Endor Labs, Invisible Threats and the Blind Spots of Security (an analysis of GlassWorm)
  27. Neovim, LSP client
  28. Helix README (features)