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> 沒有色塊,因此兩者可以分辨。

    閱讀更多: 顯示不可見字元與雙向字元

  • 看起來什麼都沒有的空白也會標出來

    行尾空白顯示為 ·,不換行空格顯示為 ⍽,Tab 顯示為 »:這些標記沒有任何程式碼會使用,畫在文字之上,並不屬於文字本身。

    閱讀更多: 看起來什麼都沒有的空白也會標出來

  • 標出來自外部的寫入

    當另一個行程改寫了你開啟的檔案時,sim 會在文字、分頁與檔案樹中標出變更之處;如果檔案在你讀取之後又有變動,儲存時不會寫入任何內容。

    閱讀更多: 標出來自外部的寫入

  • 一眼看清與 git HEAD 的差異

    行號旁的標記、檔案樹中每個檔案的狀態字母,以及狀態列中的 +n ~n -n,全都來自 git,並在背景執行。

    閱讀更多: 一眼看清與 git HEAD 的差異

  • 儲存庫自身的設定無法讓 git 執行指令

    儲存庫自身的設定無法讓 git 執行指令:監視器、hooks 和過濾器會被關閉;設定裡仍有可能執行指令的項目(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 的套件即將推出。