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.

TemaVimNeovimHelixsim
Sistema de extensionesVim 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 procesoRecuerda 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).

Caracteres invisibles, medidos

Para cada tipo de carácter que no dibuja nada o que actúa sobre el terminal, esto es lo que mostraron Neovim 0.12.5 y sim al abrir en un terminal un archivo pequeño con él. Solo se midió Neovim, así que es el único otro editor de esta tabla.

Medido el 2026-10-18: Neovim 0.12.5 (nvim --clean) y sim en el commit d3caae2, que está en sim 0.2.0. No se midió Neovim 0.12.6, la última versión publicada.[22]

Tipo de carácterNeovim 0.12.5sim
U+200B espacio de ancho cero<200b><U+200B>
U+200D unidor de ancho cero entre letrasen bruto<U+200D>
Trojan Source: U+202E, U+2066, U+2069<202e> <2066> <2069><U+202E> <U+2066> <U+2069>
caracteres de etiqueta (ASCII smuggling)en bruto<U+E0049> …
selectores de variación tras una letra (U+FE00–FE03, U+E0155 y similares)en bruto<U+FE00> … <U+E0155> …
un selector de variación ideográfica tras un kanjien bruto葛<U+E0100>
rellenos hangul U+3164, U+115F, U+FFA0en bruto<U+3164> <U+115F> <U+FFA0>
guion suave U+00AD y unidor de grafemas U+034Fen bruto<U+00AD> <U+034F>
unidor de palabras U+2060<2060><U+2060>
separador de línea U+2028en bruto<U+2028>
sin asignar U+0378, no carácter U+FDD0en bruto<U+0378> <U+FDD0>
no carácter U+FFFF<ffff><U+FFFF>
U+FEFF en medio de un archivo<feff><U+FEFF>
ESC y DEL^[ ^?^[ ^?
control C1 U+0085<85><U+0085>
uso privado (iconos de Nerd Font)tal cualtal cual
emoji con unidores y selectores, una tecla con marco, la bandera de Inglaterratal cualtal cual

De los 15 tipos que sim muestra, Neovim marcó 7 y dibujó 8 en bruto.[23] [24] [25] [26]

«en bruto»: al terminal se le envió el propio carácter y el editor no marcó nada. «tal cual»: ambos lo dejan a propósito (los iconos de una Nerd Font, las secuencias de emoji). Las demás celdas son lo que se dibujó en lugar del carácter.

La columna de sim es sim en el commit d3caae2. Los archivos, los comandos y cada fila están anotados en el NOTES.md de sim en ese commit.

sim mostrando un pequeño archivo Rust. Una instrucción oculta en caracteres de etiqueta, una carga en selectores de variación, controles bidireccionales, un relleno hangul, un guion suave y un espacio de ancho cero se dibujan cada uno como un código visible como <U+202E> sobre un bloque magenta.
sim, el mismo archivo: cada carácter oculto es un <U+XXXX> visible sobre un bloque magenta.
Neovim 0.12.5 mostrando el mismo archivo. Los caracteres de etiqueta, los selectores de variación, el relleno y el guion suave no se dibujan en absoluto; solo los controles bidireccionales y el espacio de ancho cero aparecen, como <202e> y <200b>.
Neovim 0.12.5, el mismo archivo: la línea de la carga se lee "a"; y la primera línea se lee como un comentario inofensivo, porque los caracteres de etiqueta y los selectores no se dibujan. Solo se dibujan <202e>, <2066>, <2069> y <200b>.

Lo que cuesta la manera de sim, según la misma medición: un carácter mostrado ocupa las columnas de su forma (8 si el código tiene cuatro dígitos, 9 si tiene cinco), así que una línea con muchos se alarga; un kanji con un selector de variación ideográfica muestra el selector; y la visualización no se puede desactivar.

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

  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)