sim frente a Vim, Neovim y Helix
Vim, Neovim y Helix son editores maduros y capaces, y sim es nuevo. Esta tabla cubre solo lo que puede comprobarse con una fuente primaria: la documentación de los propios editores, las entradas de CVE, las notas de versión y los gestores de issues. Donde las fuentes no dicen nada, la tabla tampoco.
Comprobado el 2026-10-17. Últimas versiones en ese momento: Vim 9.2.1202, Neovim 0.12.6, Helix 25.07.1.
| Tema | Vim | Neovim | Helix | sim |
|---|---|---|---|---|
| Sistema de extensiones | Vim script y paquetes.[1] | Lua y plugins en Vim script.[2] | Ninguna versión publicada tiene sistema de plugins. Un sistema de plugins en Scheme (Steel) es un pull request en borrador aún abierto (#8675, actualizado el 2026-10-09). La última versión es la 25.07.1 (julio de 2025).[3] [4] | Ninguno, por diseño: los plugins están en su lista de cosas que no construye. |
| Modelines (ajustes dentro de un archivo) | Activadas por defecto (desactivadas para root). Desde el parche 9.2.0350 (abril de 2026) solo puede establecerse una lista corta de opciones desde una modeline ('modelinestrict', activada por defecto). CVE anteriores: CVE-2019-12735, CVE-2026-34982.[5] [6] [7] [8] | Activadas por defecto (desactivadas para root); 'modelineexpr' está desactivada. El manual indica desactivar las modelines antes de editar texto no confiable. CVE-2019-12735 se corrigió en la 0.3.6.[9] [7] | No interpreta modelines: la solicitud (#729) sigue abierta y un pull request (#7788) se cerró sin fusionar.[10] [11] | Nunca se leen. Los ajustes y comandos no proceden del contenido de los archivos. |
| Configuración local del proyecto | 'exrc' está desactivada por defecto. El manual califica el hecho de activarla de “a potential security leak” (una posible fuga de seguridad) y dice “BETTER NOT SET THIS OPTION!” (¡mejor no establecer esta opción!).[5] | 'exrc' está desactivada por defecto. Al activarla, .nvim.lua, .nvimrc y .exrc se ejecutan solo si el archivo está en la lista de confianza (:trust).[9] | Carga un .helix/config.toml del espacio de trabajo (documentado para la 25.07.1). La confianza en el espacio de trabajo, que pregunta antes (PR #15177, fusionado en marzo de 2026), está en la rama de desarrollo y todavía no en ninguna versión.[12] [13] [14] [3] | Sin archivos de configuración ni configuración local de proyecto que cargar. |
| Caracteres de control bidireccionales (U+202E y similares) | Se muestran como <202e>: el manual dice que los caracteres Unicode no imprimibles y de ancho cero se muestran como <xxxx>, y que para los no imprimibles se usa el resaltado SpecialKey.[5] | Se muestran como <202e>, <2066> y así sucesivamente, con el resaltado SpecialKey (cian en el esquema de colores predeterminado, en nuestra prueba): U+200B–200F, U+202A–202E, U+2060–206F y U+FEFF figuran en su tabla de no imprimibles.[9] [15] | Sin marcador visible en la versión 25.07.1 (ocupan una celda en blanco en nuestra prueba). Los caracteres de ancho cero son un issue abierto (#11255), y los caracteres de control se escriben en bruto en la terminal (#16320, abierto).[16] [17] [3] | <U+202E> sobre un bloque magenta en cualquier estado, nunca enviado en bruto. El texto literal <U+202E> no recibe bloque. |
| Archivo modificado por otro proceso | Recuerda la marca de tiempo, el modo y el tamaño del archivo y avisa cuando difieren (se comprueba tras comandos de shell, en la GUI al recuperar el foco y con :checktime); 'autoread' recarga un búfer que no se ha cambiado.[18] | Las mismas comprobaciones y avisos; 'autoread' recarga un búfer que no se ha cambiado.[19] | Se rechaza la escritura con “file modified by an external process, use :w! to overwrite” (archivo modificado por un proceso externo; use :w! para sobrescribir), citado en #6492. La recarga automática es una solicitud abierta (#1125).[20] [21] | Vigila el archivo abierto, marca lo que cambió en el texto, la pestaña y el árbol, y compara el hash del archivo antes de guardar; no escribe nada si el archivo cambió. Una escritura en el mismo instante de esa comprobación aún puede colarse. |
sim: la propia especificación del proyecto (README.md, SPEC.md, sim/SPEC.md, sim/CONCEPT.md).
En qué siguen siendo mejores los demás, por ahora
sim cambia amplitud por un comportamiento fijo y comprobable. Si hoy se necesita alguna de estas cosas, conviene usar los otros editores.
- Neovim y Helix incluyen un cliente de servidores de lenguaje. sim todavía no tiene ninguno; hay previsto uno que se ejecute en un sandbox.[27] [28]
- Vim y Neovim pueden ampliarse con paquetes y plugins. sim no ofrecerá plugins.[1] [2]
- Vim y Neovim graban y reproducen macros. sim todavía no tiene macros; están previstas. Los registros y las marcas están en sim 0.2.0.[1]
Cómo se comprobó
La documentación está fijada a la etiqueta de la última versión. Los issues y los pull requests se citan con el estado que tenían en la fecha indicada, y ese estado puede cambiar. Donde una fila dice “en nuestra prueba”, abrimos un archivo con un U+202E real en la versión indicada y miramos qué dibujaba; las fuentes no pueden decirlo por nosotros. Si algo de aquí está desactualizado o es incorrecto, debe corregirse.
Fuentes
- 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)

