sim editor · Rust · Linux y macOS

El Vim de nueva generación. Muestra lo oculto.

sim es el Vim de nueva generación: escrito desde cero en Rust, conserva la edición modal y las teclas esenciales de Vim.

No lee modelines, no carga plugins y no abre ninguna conexión de red, y muestra en pantalla lo que normalmente queda oculto: caracteres invisibles, escrituras desde fuera del editor y repositorios que ejecutarían código.

Sin plugins. Sin modelines. Sin red.

Gratuito y de código abierto (MIT OR Apache-2.0). Instale con Homebrew, o compile desde el código fuente. Notas de la versión: v0.2.0

sim mostrando notes/access.py. Las líneas con una anulación de derecha a izquierda y caracteres de aislamiento los muestran como <U+202E> y <U+2066> sobre bloques magenta. Un espacio final se ve como tres puntos y un espacio de no separación como una cajita.
Un U+202E real y el texto literal <U+202E> en una misma línea: solo el carácter real recibe el bloque magenta. Debajo, una línea al estilo de Trojan Source, un espacio final (·) y un espacio de no separación (⍽). El árbol muestra el estado de git; el margen muestra los cambios frente a HEAD.

Una regla: mostrar lo oculto

La mayoría de los ataques a editores funcionan porque el editor muestra un archivo como algo que no es. La apariencia de sim (depth, niebla, diffs en rojo y verde, la insignia de alerta magenta) existe para una sola tarea: hacer visible lo oculto. El color sigue una regla fija, de modo que un color siempre significa lo mismo.

Qué significa cada color

  • GrisLos grises neutros y el grosor transmiten la estructura: texto, números, iconos, bordes.
  • AzulEl único acento significa «aquí, actúa»: el modo, la pestaña activa, una coincidencia de búsqueda, un enlace.
  • Verde, ámbar, rojoEl verde, el ámbar y el rojo significan cambio, y nada más.
  • MagentaEl magenta significa solo lo que está oculto o es peligroso: un carácter que no se muestra como lo que es, o git omitido por seguridad.

Lo que sim pone en pantalla

Cinco cosas que los archivos y los repositorios esconden. sim las muestra todas.

  • Se muestran los caracteres invisibles y bidireccionales

    Una anulación de derecha a izquierda o un espacio de ancho cero se dibuja como <U+202E> o <U+200B> sobre un bloque magenta, en cualquier estado, y nunca se envía en bruto a la terminal. El texto literal <U+202E> no recibe bloque, así que ambos se distinguen.

    Leer más: Se muestran los caracteres invisibles y bidireccionales

  • Se marcan los espacios que parecen no estar

    Los espacios finales se ven como ·, un espacio de no separación como ⍽ y un tabulador como »: marcas que ningún código usa, dibujadas sobre el texto y nunca parte de él.

    Leer más: Se marcan los espacios que parecen no estar

  • Se marcan las escrituras externas

    Cuando otro proceso reescribe el archivo abierto, sim marca lo que cambió en el texto, en la pestaña y en el árbol, y un guardado no escribe nada si el archivo cambió desde que se leyó.

    Leer más: Se marcan las escrituras externas

  • Cambios frente a git HEAD de un vistazo

    Signos en el margen, una letra de estado por cada archivo del árbol y +n ~n -n en la línea de estado, todo obtenido de git y ejecutado en segundo plano.

    Leer más: Cambios frente a git HEAD de un vistazo

  • La configuración propia de un repositorio no puede hacer que git ejecute un comando

    La configuración propia de un repositorio no puede hacer que git ejecute un comando: un monitor, los hooks y los filtros se desactivan, y donde la configuración aún podría ejecutar uno (core.sshCommand, un include) no se ejecuta git. El marco dice cuál es el caso, y la línea de estado indica la clave y el archivo.

    Leer más: La configuración propia de un repositorio no puede hacer que git ejecute un comando

sim en una terminal

sim mostrando store.py tras una escritura externa. Dos líneas cambiadas tienen fondo verde, el borde superior lleva una insignia verde, 2 changes on disk, y la pestaña muestra ↯.
Otro proceso reescribió el archivo abierto. Las líneas cambiadas están marcadas, el recuadro dice “2 changes on disk”, la pestaña muestra ↯ y no se perdió nada del búfer.
Una ventana flotante titulada Live grep sobre el árbol del proyecto, con las líneas coincidentes agrupadas por archivo y, debajo, una vista previa con colores de sintaxis.
Ctrl-f busca en el contenido de todos los archivos mientras se escribe, con una vista previa de la línea seleccionada.
sim mostrando README.md con encabezados sobre bandas, un bloque de código con vallas, una tabla alineada con barras, una lista de tareas y una barra de cita; la primera línea, donde está el cursor, muestra su # tal como se escribió.
Un README en la vista de lectura: encabezados, una tabla alineada por ancho de pantalla, una lista de tareas y una cita, dibujados como se leen. La línea donde está el cursor es el texto del propio archivo.
sim en un repositorio cuya configuración define core.sshCommand. El borde superior del recuadro del árbol lleva una insignia magenta, git not run, y la línea de estado dice: git skipped: core.sshcommand in .git/config could run a command.
En un repositorio cuyo .git/config define core.sshCommand, sim no ejecuta git: el recuadro del árbol dice git not run y la línea de estado indica la clave y el archivo.

Rápido. Medido, no afirmado.

En el benchmark del propio proyecto (compilación release, un archivo de 100.000 líneas, panel abierto, resaltado activado), una tecla tarda menos de 1 ms en el percentil 99. En un repositorio de 100.000 archivos el primer fotograma se dibuja antes de leer la lista de archivos: se midieron de 1,8 a 8,7 ms.

Medido por el proyecto en un AMD Ryzen 9 9950X (SPEED-1 y SPEED-2 de su especificación). En otro equipo los resultados serán distintos.

Frente a Vim, Neovim y Helix

Una tabla con fuentes: plugins, modelines, configuración de proyecto, caracteres ocultos y escrituras externas. También dice en qué siguen siendo mejores los demás.

Leer la comparación

Hoja de ruta

Previsto, no publicado. Nada de esto está disponible hoy.

  • Macros

    Previsto

  • Integración con el portapapeles

    Previsto

  • Servidores de lenguaje en un sandbox

    Previsto

  • Una GUI con profundidad real

    Previsto

  • Más formas de instalar

    Previsto

Todas las funciones previstas

Ejecutar el Vim de nueva generación

Instale con Homebrew, o compile desde el código fuente. Los paquetes para AUR y crates.io llegarán próximamente.