sim editor · Rust · Linux 和 macOS

新一代 Vim。它把隐藏的东西显示出来。

sim 是新一代 Vim:用 Rust 从零写成,保留了 Vim 的模态编辑和核心按键。

它不读取 modeline,不加载插件,不打开网络连接,并把平时隐藏的东西显示出来:不可见字符、编辑器之外的写入、会执行代码的仓库。

没有插件。没有 modeline。没有网络。

免费开源(MIT OR Apache-2.0)。使用 Homebrew 安装,或从源码构建。 发布说明: v0.2.0

sim 正在显示 notes/access.py。含有从右到左覆盖字符和隔离字符的行,把它们显示为品红色块上的 <U+202E> 和 <U+2066>。行尾空白显示为三个点,不间断空格显示为一个小方框。
同一行里,真正的 U+202E 与字面文本 <U+202E> 并排:只有真正的字符才有品红色块。其下是一行采用 Trojan Source 手法的代码、一个行尾空白(·)和一个不间断空格(⍽)。文件树显示 git 状态,行号旁显示相对 HEAD 的改动。

一条规则:把隐藏的东西显示出来

大多数针对编辑器的攻击之所以奏效,是因为编辑器把文件显示成了它并不是的样子。sim 的外观(depth、雾化、红绿差异、品红色警示徽标)只为一件事而存在:让隐藏的东西看得见。颜色遵循固定的规则,所以同一种颜色永远表示同一件事。

每种颜色的含义

  • 灰色中性灰色和字重承载结构:正文、数字、图标、边框。
  • 蓝色唯一的强调色表示“这里,请操作”:当前模式、所在的标签页、搜索匹配、链接。
  • 绿、琥珀、红绿色、琥珀色和红色只表示改动,别无他意。
  • 品红色品红色只表示被隐藏或有危险的东西:没有按原样显示的字符,以及出于安全考虑而跳过的 git。

sim 在屏幕上显示的东西

文件和仓库会藏起五样东西,sim 逐一显示出来。

  • 显示不可见字符和双向字符

    从右到左覆盖字符或零宽空格,在任何状态下都会以品红色块显示为 <U+202E> 或 <U+200B>,也绝不会原样发送给终端。文本字面的 <U+202E> 没有色块,因此两者可以区分。

    阅读更多: 显示不可见字符和双向字符

  • 看起来什么都没有的空白也会标出来

    行尾空白显示为 ·,不间断空格显示为 ⍽,制表符显示为 »:这些标记没有任何代码会使用,绘制在文本之上,不属于文本本身。

    阅读更多: 看起来什么都没有的空白也会标出来

  • 标出来自外部的写入

    当另一个进程改写了你打开的文件时,sim 会在文本、标签页和文件树中标出改动之处;如果文件在你读取之后又发生了变化,保存时不会写入任何内容。

    阅读更多: 标出来自外部的写入

  • 一眼看清相对 git HEAD 的改动

    行号旁的标记、文件树中每个文件的状态字母,以及状态栏里的 +n ~n -n,全部来自 git,并在后台运行。

    阅读更多: 一眼看清相对 git HEAD 的改动

  • 仓库自身的配置无法让 git 运行命令

    仓库自身的配置无法让 git 运行命令:监视器、钩子和过滤器会被关闭;配置里仍有可能运行命令的项(core.sshCommand、include)时,就不运行 git。边框会说明这一点,状态栏会指明相关的键和文件。

    阅读更多: 仓库自身的配置无法让 git 运行命令

终端里的 sim

外部写入之后的 store.py 在 sim 中的显示。两行改动的行呈绿色背景,上边框带有一个绿色徽标“2 changes on disk”,标签页上显示 ↯。
另一个进程改写了打开的文件。改动的行被标出,边框上写着“2 changes on disk”,标签页上显示 ↯,缓冲区里没有丢失任何内容。
项目树上方浮着一个标题为 Live grep 的窗口,按文件分组列出匹配的行,下方是带语法着色的预览。
Ctrl-f 随着你的输入搜索所有文件的内容,并预览所选的那一行。
sim 显示 README.md:带底色条的标题、带围栏的代码块、用竖线对齐的表格、任务列表和引用条;光标所在的第一行保持输入时的样子。
阅读视图中的 README:标题、按显示宽度对齐的表格、任务列表和引用,都按阅读时的样子绘制。光标所在的行是文件本身的文本。
sim 位于一个配置设置了 core.sshCommand 的仓库中。文件树边框的上沿有一个品红色徽标 git not run,状态栏写着:git skipped: core.sshcommand in .git/config could run a command。
在 .git/config 设置了 core.sshCommand 的仓库里,sim 不运行 git:文件树的边框写着 git not run,状态栏会指明相关的键和文件。

快。靠实测,不靠宣称。

在项目自带的基准测试中(release 构建、100,000 行的文件、面板打开、语法高亮开启),单次按键在 p99 下耗时不到 1 ms。在有 100,000 个文件的仓库中,第一帧会在读取文件列表之前就绘制出来:实测 1.8 到 8.7 ms。

由项目在 AMD Ryzen 9 9950X 上测得(见其规格中的 SPEED-1、SPEED-2)。你的机器会有所不同。

对比 Vim、Neovim 和 Helix

一张附来源的表格:插件、modeline、项目配置、隐藏字符和外部写入。其中也写明了其他编辑器目前仍做得更好的地方。

阅读对比

路线图

计划中,尚未发布。这里的任何内容今天都还不能使用。

  • 宏

    计划中

  • 剪贴板集成

    计划中

  • 沙箱中的语言服务器

    计划中

  • 真正有层次感的 GUI

    计划中

  • 更多安装方式

    计划中

全部计划中的功能

用上新一代 Vim

使用 Homebrew 安装,或从源码构建。AUR和crates.io 的软件包即将推出。