O que o sim faz hoje
O que o sim faz hoje, agrupado pela finalidade. Cada recurso lista os IDs de requisitos da especificação do projeto que o sustentam. Os recursos planejados ficam apenas no Roadmap.
Recusa o que deve recusar e preserva o seu texto
Nenhum texto se perde sem uma ação explícita, e os arquivos não conseguem reconfigurar o editor.
Sem modelines, sem arquivos de configuração, sem plugins
Configurações e comandos nunca são lidos do conteúdo de um arquivo, então um arquivo não consegue reconfigurar o editor. Não há arquivo de configuração para carregar de um repositório, nem API de plugins, e o sim não abre conexões de rede. As únicas coisas que ele memoriza são a sua aparência, a sua escolha de ícones e a sua visualização de Markdown, uma palavra para cada.
Especificação: SAFE-9
Salvamentos que não gravam pela metade
Um salvamento grava um arquivo temporário ao lado do original (criado com modo 0600 e O_EXCL), executa fsync nele, o renomeia sobre o original e executa fsync no diretório, de modo que você vê o arquivo antigo ou o novo, nunca uma mistura. Um arquivo que pertence a outro usuário, que tem hard links ou que está em um diretório somente leitura é salvo no próprio lugar, depois de uma cópia de recuperação. O sim se recusa a gravar através de um link que pertença a outro usuário. Abrir e salvar sem editar produz uma saída idêntica byte a byte.
Especificação: SAFE-1, SAFE-2, SAFE-3, SAFE-5
Nada se perde em uma falha
As mudanças não salvas ganham um snapshot no máximo uma vez por segundo, em um diretório de estado privado (0700). Depois de uma falha, de um
kill -9ou de um terminal fechado, abrir o arquivo de novo oferece essas mudanças de volta como um único passo de desfazer. No máximo um segundo de trabalho é perdido.Especificação: SAFE-6
A busca nunca executa o que o repositório controla
O sim encontra o ripgrep sozinho nas entradas absolutas do
PATHe o executa com um ambiente vazio e--no-config, nunca com--pre, então um repositório não consegue fazer uma busca executar o código dele. Uma busca nunca grava nada e nunca segue um link simbólico para fora do projeto.Especificação: GREP-7, GREP-8
Arquivos que não são texto abrem somente para leitura
Um arquivo que não é UTF-8 válido, ou que tem um NUL nos primeiros 8 KB, abre somente para leitura, com o motivo à mostra, e os bytes inválidos são desenhados como U+FFFD. Edições e gravações são recusadas, porque o texto na tela não seria o arquivo.
Especificação: SAFE-4
Um salvamento em conflito mantém as duas versões
Quando um salvamento encontra o arquivo alterado no disco, nada se perde de nenhum dos lados.
:w!mantém a sua versão depois de copiar a versão do disco para o diretório de estado, e:e!adota a do disco depois de um snapshot da sua.Especificação:
--plain: sem processos externossim --plainé só o núcleo, com a aparência calm, um só arquivo, nenhum painel e nenhum programa externo: sem git, sem ripgrep, sem filtro, sem hook. É o padrão como root e como o editor do sudoedit, e a linha de status mostraplain.Especificação:
Alcance e velocidade
O menor número de passos entre “aquele arquivo” e a leitura dele.
Uma árvore de projeto que nunca se mexe
O
simabre com a árvore do diretório atual. Os diretórios vêm primeiro, depois os arquivos, cada grupo por nome, sempre na mesma ordem, e a expansão fica como você a deixou, então você encontra os arquivos pela posição em vez de ler. Os diretórios são lidos em segundo plano: as entradas aparecem conforme chegam, sem mover nada acima delas.Especificação: TREE-1, TREE-3, TREE-4, TREE-5
Encontre arquivos e texto em uma janela flutuante
Ctrl-pencontra arquivos por correspondência aproximada no caminho, ordenados pela qualidade da correspondência e pela chance de você abrir cada um.Ctrl-fbusca no conteúdo de todos os arquivos enquanto você digita (com o ripgrep, se ele estiver noPATH), com os resultados agrupados por arquivo e uma prévia da linha selecionada.Escdevolve tudo como estava.Especificação: FIND-2, FIND-4, GREP-1, GREP-5, PICK-1
Os arquivos prováveis são marcados onde estão
O sim memoriza quais arquivos você abre e os ordena por recência e frequência combinadas. Os cinco mais prováveis são marcados com
•na árvore. Uma tecla,., restringe a árvore aos arquivos que mudaram, estão abertos ou foram abertos recentemente.Especificação: MARK-2, MARK-3
Vários arquivos, um editor completo para cada um
Cada arquivo aberto tem o próprio desfazer, os próprios snapshots, o próprio observador e os próprios salvamentos. Uma barra de abas os mostra, com um
●em negrito para mudanças não salvas.TabeShift-Tabalternam entre eles.Especificação: BUF-1, BUF-2, UI-4
Rápido o bastante para você nem notar
No benchmark do projeto (build de release, um arquivo de 100 mil linhas, painel aberto, realce de sintaxe ligado), uma tecla leva no máximo 1 ms no p99, em telas de 80×24 a 240×60. Em um repositório com 100 mil arquivos, o primeiro quadro é desenhado antes de a lista de arquivos ser lida: de 1,8 a 8,7 ms medidos, para um requisito de 20 ms. Tudo o que é lento (percorrer uma árvore, consultar o git, analisar o código para o realce) roda em uma thread em segundo plano.
Especificação: SPEED-1, SPEED-2
Um só binário: sim
O binário separado
sifoi incorporado aosim: um comando para instalar e um para executar. O núcleo é uma biblioteca,sim-editor-core, sobre a qual osimé construído.sim --versionesim --helpimprimem o resultado e saem sem tocar no terminal.Especificação:
Escolha uma aba por letra
<Space>bppõe uma letra em cada aba, e a letra leva direto ao seu arquivo.<Space>bcfaz o mesmo para fechar uma, e nunca fecha um arquivo modificado. Uma dica citaTabeShift-Tabna primeira vez que um segundo arquivo é aberto, até você usá-las três vezes.Especificação:
Uma árvore de mudanças em relação ao git HEAD
<Space>gemostra a árvore só com os arquivos que diferem deHEAD, preparados, não preparados e não rastreados, cada um com sua letra de status e+n −n, e cada pasta com as somas. Enter abre a versão deHEADde um arquivo, somente leitura.Especificação: GIT-1, GIT-2, GIT-3, GIT-4, DIFF-1, DIFF-3, DIFF-4
Leitura confortável
Cores e layout calculados, não adivinhados.
Cores de sintaxe tiradas da sua própria paleta
As cores vêm da paleta do seu terminal (lida com OSC 4). Elas mantêm o matiz, mas variam em luminosidade até o texto atingir |Lc| 75 em relação ao fundo. Palavras-chave são vermelhas, strings e números verdes, tipos amarelos, funções ciano e comentários cinza em itálico; azul e magenta nunca são usados em código. A linguagem vem do nome do arquivo, da extensão ou da primeira linha, usando o conjunto de sintaxes do bat.
zhdesliga as cores.Especificação: SYN-1, SYN-2, SYN-4
Uma visualização de leitura de Markdown
Num arquivo Markdown, todas as linhas, exceto a do cursor, são desenhadas como se lê: os marcadores de ênfase e de código não são desenhados, as tabelas são alinhadas pela largura de exibição e os avisos (
> [!NOTE]) mostram a palavra do seu tipo. Só esses marcadores são ocultados, nunca um#, um colchete, uma URL ou um caractere do texto, e<Space>ummostra o texto bruto.Especificação: UI-8, MD-1, MD-10, MD-11
Três aparências
Calm é a mais sóbria: quatro estilos e um fundo cromático. Flat mostra um diff em verde e vermelho, com linhas tingidas. Depth, a padrão, acrescenta caixas, uma régua de visão geral e uma névoa que esmaece o texto conforme a distância até o cursor.
zlalterna entre elas. Calm é a aparência para quem não distingue vermelho de verde.Especificação: LOOK-1, LOOK-2, LOOK-3
Legível por medição
O texto tem |Lc| 90 e o texto secundário |Lc| 60 (APCA), calculados a partir do fundo do seu terminal. No calm, a única cor de mudança continua distinguível com visão de cores protan, deutan e tritan. Um matiz significa uma só coisa em toda a interface: cinza para a estrutura, azul para onde você age, verde, âmbar e vermelho para mudança, magenta apenas para o que está oculto ou é perigoso.
Especificação: VIS-4, VIS-5, COLOR-1, UI-12
Um editor para morar dentro
Ícones na árvore (é preciso uma Nerd Font;
zios desliga), uma barra de abas, uma trilha de navegação como título do editor (src › sim.rs › leader_key), uma linha de status com o modo, a branch, as mudanças em relação ao HEAD e a posição (a codificação e o fim de linha só aparecem quando não são UTF-8 ou LF), números de linha relativos, guias de indentação, uma barra de rolagem com marcas e um clarão rápido sobre o que você acabou de copiar com yank.Especificação: UI-2, UI-5, UI-6, UI-10, UI-11
Texto em japonês e em outros idiomas CJK
Caracteres largos ocupam duas colunas, a prosa quebra linhas segundo as regras kinsoku do japonês, os movimentos por palavra dividem o texto CJK onde a escrita muda e, com um IME ativo, as teclas de largura total funcionam como comandos.
Especificação: VIS-7, VI-10
Funciona sem cor, e nunca só pela cor
NO_COLORe terminais com menos de 8 cores desenham só com peso, sublinhado e vídeo inverso, e o sim não pede nenhuma cor ao terminal. O significado nunca depende só da cor: uma linha alterada é┆na coluna de sinais, as pastas mostram a letra do status do git mais forte e uma aba mostra↯para um arquivo alterado no disco. Com os ícones desligados, nenhum glifo de uso privado é desenhado.Especificação:
Os ícones começam ligados onde uma Nerd Font é provável
Os ícones exigem uma Nerd Font, e um terminal não consegue dizer se tem uma. Eles começam ligados no Ghostty, no kitty e no WezTerm e desligados nos demais, com uma dica exibida uma única vez na linha de status:
zi: icons (needs a Nerd Font). O que oziescolheu por último sempre vale.Especificação:
O que se copia acende, em qualquer aparência
O que você acabou de copiar com yank acende por 150 ms. O calm, a aparência sóbria, agora também acende: no cinza de uma seleção, ou sublinhado onde não há nenhuma. Uma linha que outro processo acabou de escrever no arquivo aberto acende por 400 ms.
Especificação: UI-13, UI-19
Teclas
A gramática do vi, sem as esquisitices do vi.
As teclas do vi que suas mãos já conhecem
Movimentos, operadores, objetos de texto, contadores,
., modo Visual, busca com smartcase,:se intervalos, sem as esquisitices do vi:Ycopia até o fim da linha,Urefaz,Ctrl-ssalva eqsai. Setas, Home, End e Delete funcionam em todo lugar.Especificação: VI-1, VI-2, VI-3, VI-4, VI-5, VI-6, VI-7
Os yanks chegam à área de transferência do sistema
Todo yank sem nome de registrador também vai para a área de transferência do sistema por meio do OSC 52, inclusive dentro do tmux. Exclusões e alterações preenchem apenas o registrador, então
xeddnunca sobrescrevem o que você copiou.Especificação: VI-8
O mouse, sem surpresas
Clique para abrir um arquivo ou posicionar o cursor, use a roda para rolar a tela, arraste para selecionar. O mouse nunca edita, salva nem cria snapshots por conta própria.
Especificação: PTR-1, PTR-2
Space é a tecla líder, com uma janela which-key
Uma pausa em um prefixo (
Space,g,z,Z,[,]ou um operador comod) abre uma pequena janela que lista as teclas que podem vir em seguida. Continuar digitando funciona exatamente como sem a janela.Especificação:
:helpe F1: uma lista pesquisável de todas as teclas:helpeF1abrem uma lista pesquisável de todas as teclas e comandos, com uma prévia do que cada um faz.:help tabencontraTab,Shift-Tabe<Space>bp. A lista é a única tabela de teclas do produto, por isso não pode se afastar das teclas.Especificação:
A busca diz onde você está
Enquanto as ocorrências de uma busca estão destacadas, a linha de status diz em qual delas o cursor está e quantas existem:
[3/12].Especificação:
Registradores do Vim
"aa"zguardam texto e"Aa"Zacrescentam a ele;"0é o último yank,"1a"9as últimas exclusões e"_aceita qualquer coisa e não guarda nada.:registerslista todos. Eles vivem só na memória e todos os arquivos abertos os compartilham. Um yank sem nome continua indo para a área de transferência do sistema por meio do OSC 52; uma exclusão, não.Especificação: VI-15
Marcas
maamzpõem uma marca no arquivo;'avai para a linha dela e a tecla de crase (acento grave) para o lugar exato, também com um operador (d'a).''volta para onde o cursor estava antes do último salto. Uma marca acompanha o seu texto por edições, desfazer e mudanças vindas de fora, e:markslista todas. As marcas vivem só na memória.Especificação: VI-17
:tutorCerca de quinze minutos de lições curtas em um buffer temporário, no idioma da sua localidade (English, 日本語, 简体中文, 繁體中文, 한국어, Español, Português, Français, Deutsch ou Русский; English para qualquer outra). Os exercícios se marcam sozinhos com ✗ e ✓ enquanto você digita.
Especificação: TUTOR-1, TUTOR-2, TUTOR-3, TUTOR-4
Roadmap
Planejado, ainda não lançado. Nada desta lista está disponível ainda, e a ordem não é uma promessa.
Macros
Planejado
Gravar e reproduzir teclas. Hoje o sim não tem nenhuma.
Integração com a área de transferência
Planejado
Mais do que o yank de hoje por meio do OSC 52.
Servidores de linguagem, em sandbox
Planejado
Um cliente de servidor de linguagem cujo servidor roda em um sandbox e, na linha de status, um indicador de se a raiz do projeto é confiável.
Uma GUI com profundidade de verdade
Planejado
Uma interface gráfica com sombras e elevação reais. Ela começou como protótipo; não há nada para instalar.
Mais formas de instalar
Planejado
Os pacotes para AUR e crates.io chegam em breve.