Lo que sim hace hoy
Lo que sim hace hoy, agrupado según su propósito. Cada función indica los ID de requisitos de la especificación del proyecto que la respaldan. Las funciones previstas aparecen solo en la hoja de ruta.
Rechaza lo que debe y conserva el texto
Nadie pierde texto sin una acción explícita, y los archivos no pueden reconfigurar el editor.
Sin modelines, sin archivos de configuración, sin plugins
Los ajustes y comandos nunca se leen del contenido de un archivo, así que un archivo no puede reconfigurar el editor. No hay archivo de configuración que cargar desde un repositorio, ni API de plugins, y sim no abre conexiones de red. Lo único que recuerda es la apariencia, el icono y la vista de Markdown elegidos, una palabra cada uno.
Especificación: SAFE-9
Guardados que no pueden quedar a medias
Un guardado escribe un archivo temporal junto al original (creado con modo 0600 y O_EXCL), le hace fsync, lo renombra sobre el original y hace fsync del directorio, de modo que se ve el archivo antiguo o el nuevo, nunca una mezcla. Un archivo que pertenece a otra persona, que tiene enlaces duros o que está en un directorio de solo lectura se guarda en el sitio tras crear una copia de recuperación. sim se niega a escribir a través de un enlace que pertenezca a otra persona. Abrir y guardar sin editar produce una salida idéntica byte a byte.
Especificación: SAFE-1, SAFE-2, SAFE-3, SAFE-5
No se pierde nada en un fallo
Los cambios sin guardar se capturan en una instantánea como máximo una vez por segundo en un directorio de estado privado (0700). Tras un fallo, un
kill -9o una terminal cerrada, al volver a abrir el archivo se ofrecen de nuevo como un solo paso de deshacer. Se pierde como mucho un segundo de trabajo.Especificación: SAFE-6
La búsqueda nunca ejecuta lo que controla el repositorio
sim localiza ripgrep por sí mismo en las entradas absolutas de
PATHy lo ejecuta con un entorno vacío y--no-config, nunca con--pre, de modo que un repositorio no puede hacer que una búsqueda ejecute su código. Una búsqueda nunca escribe nada ni sigue un enlace simbólico fuera del proyecto.Especificación: GREP-7, GREP-8
Los archivos que no son texto se abren en solo lectura
Un archivo que no es UTF-8 válido, o que tiene un NUL en sus primeros 8 KB, se abre en solo lectura con el motivo a la vista, y los bytes no válidos se dibujan como U+FFFD. Se rechazan las ediciones y las escrituras, porque el texto en pantalla no sería el archivo.
Especificación: SAFE-4
Un guardado en conflicto conserva ambas versiones
Cuando un guardado detecta que el archivo cambió en disco, no se pierde nada de ninguna de las dos partes.
:w!conserva la versión propia tras copiar la ajena al directorio de estado, y:e!toma la ajena tras una instantánea de la propia.Especificación:
--plain: sin procesos externossim --plaines solo el núcleo: la apariencia calm, un solo archivo, sin panel y sin ejecutar programa alguno por su cuenta: ni git, ni ripgrep, ni filtro, ni hook. Es el modo predeterminado como root y como editor de sudoedit, y la línea de estado diceplain.Especificación:
Alcance y velocidad
Los menos pasos posibles desde «ese archivo» hasta leerlo.
Un árbol de proyecto que nunca se mueve
simse abre con el árbol del directorio actual. Primero van los directorios y luego los archivos, cada grupo por nombre, siempre en el mismo orden, y la expansión queda como se dejó, de modo que los archivos se encuentran por su lugar y no leyendo. Los directorios se leen en segundo plano: las entradas aparecen al llegar, sin mover nada de lo que tienen encima.Especificación: TREE-1, TREE-3, TREE-4, TREE-5
Búsqueda de archivos y texto en una ventana flotante
Ctrl-pbusca archivos por coincidencia aproximada en la ruta, ordenados por la calidad de la coincidencia y por la probabilidad de que se abra cada uno.Ctrl-fbusca en el contenido de todos los archivos mientras se escribe (con ripgrep si está enPATH), con los resultados agrupados por archivo y una vista previa de la línea seleccionada.Esclo deja todo como estaba.Especificación: FIND-2, FIND-4, GREP-1, GREP-5, PICK-1
Los archivos probables se marcan donde están
sim recuerda qué archivos se abren y los ordena combinando recencia y frecuencia. Los cinco más probables se marcan con
•en el árbol. Una tecla,., reduce el árbol a los archivos que cambiaron, están abiertos o se abrieron hace poco.Especificación: MARK-2, MARK-3
Varios archivos, un editor completo para cada uno
Cada archivo abierto tiene su propio historial de deshacer, sus instantáneas, su vigilancia y sus guardados. Una barra de pestañas los muestra, con un
●en negrita para los cambios sin guardar.TabyShift-Tabcambian de pestaña.Especificación: BUF-1, BUF-2, UI-4
Tan rápido que no se nota
En el benchmark del proyecto (compilación release, un archivo de 100.000 líneas, panel abierto, resaltado activado), una tecla tarda como máximo 1 ms en el percentil 99, en pantallas de 80×24 a 240×60. 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, frente a un requisito de 20 ms. Todo lo lento (recorrer un árbol, consultar a git, analizar para el resaltado) se ejecuta en un hilo en segundo plano.
Especificación: SPEED-1, SPEED-2
Un solo binario: sim
El binario independiente
sise integra ensim: un solo comando para instalar y uno para ejecutar. El núcleo es una biblioteca,sim-editor-core, sobre la que se construyesim.sim --versionysim --helpimprimen su salida y terminan sin tocar la terminal.Especificación:
Elegir una pestaña por letra
<Space>bppone una letra en cada pestaña, y la letra salta a su archivo.<Space>bchace lo mismo para cerrar una, y nunca cierra un archivo modificado. Una pista nombraTabyShift-Tabla primera vez que hay un segundo archivo abierto, hasta que se han usado tres veces.Especificación:
Un árbol de cambios respecto a git HEAD
<Space>gemuestra el árbol solo con los archivos que difieren deHEAD, con cambios preparados, sin preparar y sin seguimiento, cada uno con su letra de estado y+n −n, y cada carpeta con las sumas. Enter abre la versión deHEADde un archivo, en solo lectura.Especificación: GIT-1, GIT-2, GIT-3, GIT-4, DIFF-1, DIFF-3, DIFF-4
Lectura cómoda
Colores y diseño calculados, no adivinados.
Colores de sintaxis a partir de la paleta de la terminal
Los colores salen de la paleta de la terminal (leída con OSC 4). Conservan el tono, pero se desplazan en luminosidad hasta que el texto alcanza |Lc| 75 respecto al fondo. Las palabras clave son rojas, las cadenas y los números verdes, los tipos amarillos, las funciones cian y los comentarios gris en cursiva; el azul y el magenta nunca se usan para código. El lenguaje se deduce del nombre del archivo, la extensión o la primera línea, con el conjunto de sintaxis de bat.
zhdesactiva los colores.Especificación: SYN-1, SYN-2, SYN-4
Una vista de lectura de Markdown
En un archivo Markdown, cada línea salvo la del cursor se dibuja como se lee: los marcadores de énfasis y de código no se dibujan, las tablas se alinean por ancho de pantalla y los avisos (
> [!NOTE]) muestran la palabra de su tipo. Solo se ocultan esos marcadores, nunca un#, un corchete, una URL ni un carácter del texto, y<Space>ummuestra el texto sin transformar.Especificación: UI-8, MD-1, MD-10, MD-11
Tres apariencias
Calm es la más sobria: cuatro estilos y un fondo cromático. Flat muestra un diff en verde y rojo con filas teñidas. Depth, la predeterminada, añade recuadros, una regla de visión general y una niebla que atenúa el texto según su distancia al cursor.
zllas recorre en ciclo. Calm es la apariencia para quien no distingue el rojo del verde.Especificación: LOOK-1, LOOK-2, LOOK-3
Legible por medición
El texto tiene |Lc| 90 y el texto secundario |Lc| 60 (APCA), calculados a partir del fondo de la terminal. En calm, el único color de cambio sigue siendo distinguible con visión del color protán, deután y tritán. Un tono significa una sola cosa en toda la interfaz: gris para la estructura, azul para donde se actúa, verde, ámbar y rojo para el cambio, y magenta solo para lo oculto o peligroso.
Especificación: VIS-4, VIS-5, COLOR-1, UI-12
Un editor en el que se puede vivir
Iconos en el árbol (hace falta una Nerd Font;
zilos desactiva), una barra de pestañas, una ruta de navegación como título del editor (src › sim.rs › leader_key), una línea de estado con el modo, la rama, los cambios frente a HEAD y la posición (la codificación y el fin de línea solo aparecen si no son UTF-8 o LF), números de línea relativos, guías de sangría, una barra de desplazamiento con marcas y un destello sobre lo que se acaba de copiar con yank.Especificación: UI-2, UI-5, UI-6, UI-10, UI-11
Texto japonés y otros CJK
Los caracteres anchos ocupan dos columnas, la prosa se ajusta con las reglas japonesas de kinsoku, los movimientos por palabra dividen el texto CJK donde cambia la escritura y, con un IME activo, las teclas de ancho completo funcionan como comandos.
Especificación: VIS-7, VI-10
Funciona sin color y nunca solo por color
Con
NO_COLORy en las terminales con menos de 8 colores, sim dibuja solo con grosor, subrayado y vídeo inverso, y no pide colores a la terminal. El significado nunca depende solo del color: una línea cambiada es┆en la columna de signos, las carpetas muestran la letra del estado de git más fuerte y una pestaña muestra↯cuando un archivo cambió en disco. Con los iconos desactivados no se dibuja ningún glifo del área de uso privado.Especificación:
Los iconos empiezan activados donde es probable que haya una Nerd Font
Los iconos necesitan una Nerd Font, y una terminal no puede decir si la tiene. Empiezan activados en Ghostty, kitty y WezTerm y desactivados en el resto, con una pista que se muestra una sola vez en la línea de estado:
zi: icons (needs a Nerd Font). Siempre prevalece lo quezieligió por última vez.Especificación:
Lo copiado se ilumina, en cualquier apariencia
Lo que acabas de copiar con yank se ilumina durante 150 ms. Calm, la apariencia sobria, también lo ilumina ahora: con el gris de una selección, o subrayado donde no hay ninguna. Una línea que otro proceso acaba de escribir en el archivo abierto se ilumina durante 400 ms.
Especificación: UI-13, UI-19
Teclas
La gramática de vi, sin los accidentes de vi.
Las teclas de vi que las manos ya conocen
Movimientos, operadores, objetos de texto, contadores,
., modo Visual, búsqueda con smartcase,:sy rangos, sin los accidentes de vi:Ycopia hasta el final de la línea,Urehace,Ctrl-sguarda yqsale. Las flechas, Home, End y Delete funcionan en todas partes.Especificación: VI-1, VI-2, VI-3, VI-4, VI-5, VI-6, VI-7
Lo copiado llega al portapapeles del sistema
Cada yank sin nombre de registro va también al portapapeles del sistema mediante OSC 52, incluso dentro de tmux. Borrar y cambiar solo llenan el registro, así que
xyddnunca sobrescriben lo que se copió.Especificación: VI-8
El ratón, sin sorpresas
Clic para abrir un archivo o colocar el cursor, rueda para desplazarse, arrastrar para seleccionar. El ratón nunca edita, guarda ni crea instantáneas por sí mismo.
Especificación: PTR-1, PTR-2
Space es la tecla líder, con una ventana which-key
Una pausa sobre un prefijo (
Space,g,z,Z,[,]o un operador comod) abre una pequeña ventana que lista las teclas que pueden venir a continuación. Seguir escribiendo funciona exactamente igual que sin la ventana.Especificación:
:helpy F1: una lista de todas las teclas en la que se puede buscar:helpyF1abren una lista de todas las teclas y comandos en la que se puede buscar, con una vista previa de lo que hace cada uno.:help tabencuentraTab,Shift-Taby<Space>bp. La lista es la única tabla de teclas del producto, así que no puede desviarse de las teclas.Especificación:
La búsqueda indica dónde se está
Mientras las coincidencias de una búsqueda están resaltadas, la línea de estado indica en cuál está el cursor y cuántas hay:
[3/12].Especificación:
Registros de Vim
"aa"zguardan texto y"Aa"Zlo añaden;"0es el último yank,"1a"9los últimos borrados y"_acepta cualquier cosa y no guarda nada.:registerslos lista. Viven solo en memoria y todos los archivos abiertos los comparten. Un yank sin nombre sigue yendo al portapapeles del sistema mediante OSC 52; un borrado, no.Especificación: VI-15
Marcas
maamzponen una marca en el archivo;'ava a su línea y la tecla del acento grave a su lugar exacto, también con un operador (d'a).''vuelve a donde estaba el cursor antes del último salto. Una marca sigue a su texto a través de ediciones, deshacer y cambios desde fuera, y:markslas lista. Las marcas viven solo en memoria.Especificación: VI-17
:tutorUnos quince minutos de lecciones cortas en un búfer temporal, en el idioma de tu configuración regional (English, 日本語, 简体中文, 繁體中文, 한국어, Español, Português, Français, Deutsch o Русский; English para cualquier otro). Los ejercicios se marcan solos con ✗ y ✓ mientras escribes.
Especificación: TUTOR-1, TUTOR-2, TUTOR-3, TUTOR-4
Hoja de ruta
Previsto, no publicado. Nada de esta lista está disponible todavía y el orden no es una promesa.
Macros
Previsto
Grabar y reproducir teclas. Hoy sim no tiene ninguna.
Integración con el portapapeles
Previsto
Más que el yank actual mediante OSC 52.
Servidores de lenguaje en un sandbox
Previsto
Un cliente de servidores de lenguaje cuyo servidor se ejecuta en un sandbox, y un indicador en la línea de estado de si se confía en la raíz del proyecto.
Una GUI con profundidad real
Previsto
Un front end gráfico con sombras y elevación reales. Ha empezado como prototipo; no hay nada que instalar.
Más formas de instalar
Previsto
Los paquetes para AUR y crates.io llegarán próximamente.