sim 現在能做什麼
sim 現在能做什麼,依用途分組。每項功能都列出了專案規格中支撐它的需求編號。規劃中的功能只列在「路線圖」之下。
該拒絕的就拒絕,你的文字不會遺失
沒有你的明確操作,任何人的文字都不會遺失,檔案也無法重新設定編輯器。
沒有 modeline,沒有設定檔,沒有外掛
設定與指令絕不會從檔案內容中讀取,因此檔案無法重新設定編輯器。沒有可從儲存庫載入的設定檔,沒有外掛 API,sim 也不會開啟任何網路連線。它記住的只有你選擇的外觀、圖示與 Markdown 檢視,各一個詞。
規格: SAFE-9
不會寫到一半的儲存
儲存時,sim 會在原檔旁寫入一個暫存檔(以 0600 權限與 O_EXCL 建立),對其執行 fsync,再以 rename 覆蓋原檔,並對目錄執行 fsync,所以你看到的要嘛是舊檔,要嘛是新檔,絕不會是兩者的混合。屬於他人的檔案、有硬連結的檔案,或位於唯讀目錄中的檔案,會在產生復原用副本後原地儲存。sim 拒絕透過他人擁有的連結寫入。開啟後不做編輯直接儲存,輸出與原檔逐位元組相同。
規格: SAFE-1, SAFE-2, SAFE-3, SAFE-5
當機時不遺失文字
未儲存的變更最多每秒產生一次快照,存入私有的狀態目錄(0700)。當機、
kill -9或關閉終端機之後,再次開啟該檔案時,會提示還原它們,作為一次復原步驟。最多遺失一秒鐘的工作。規格: SAFE-6
搜尋絕不執行儲存庫所能控制的東西
sim 自己在
PATH的絕對路徑項目中尋找 ripgrep,並以空環境與--no-config執行它,絕不使用--pre,所以儲存庫無法讓搜尋執行它的程式碼。搜尋從不寫入任何內容,也從不跟隨符號連結走出專案。規格: GREP-7, GREP-8
非文字檔案以唯讀方式開啟
不是有效 UTF-8 的檔案,或前 8 KB 中含有 NUL 的檔案,會以唯讀方式開啟並顯示原因,無效位元組顯示為 U+FFFD。編輯與寫入都會被拒絕,因為畫面上的文字並不等於檔案本身。
規格: SAFE-4
儲存發生衝突時保留兩個版本
當儲存時發現檔案在磁碟上已被改動,雙方的內容都不會遺失。
:w!在把對方的版本複製到狀態目錄之後保留你的版本,:e!在替你的版本建立快照之後採用對方的版本。規格:
--plain:不執行外部行程sim --plain只有核心:calm 外觀、單一檔案、沒有面板,也不執行任何外部程式(不用 git,不用 ripgrep,不用過濾器,不用掛鉤)。以 root 身分執行或作為 sudoedit 的編輯器時,這是預設行為,狀態列會顯示plain。規格:
觸及與速度
從「那個檔案」到讀到它,步驟最少。
從不亂動的專案樹
sim啟動時會開啟目前目錄的檔案樹。目錄在前,檔案在後,各自依名稱排序,順序始終不變,展開狀態也維持你離開時的樣子,所以你是憑位置而不是靠閱讀來找到檔案。目錄在背景讀取:項目到達時才出現,不會推動它上方的任何內容。規格: TREE-1, TREE-3, TREE-4, TREE-5
在浮動視窗中尋找檔案與文字
Ctrl-p依路徑做模糊比對來尋找檔案,並依比對程度與你開啟每個檔案的可能性排序。Ctrl-f隨著你的輸入搜尋所有檔案的內容(PATH中有 ripgrep 時使用它),結果依檔案分組,並預覽所選的那一行。Esc會讓一切恢復原狀。規格: FIND-2, FIND-4, GREP-1, GREP-5, PICK-1
可能要開啟的檔案就地標出
sim 會記住你開啟過哪些檔案,並綜合最近使用與使用頻率來排序。最可能的五個檔案在檔案樹中以
•標出。只要一個鍵.,就能把檔案樹縮小到有變更、已開啟或最近開啟過的檔案。規格: MARK-2, MARK-3
多個檔案,每個都是完整的編輯器
每個開啟的檔案都有各自的復原、快照、監看與儲存。分頁列會顯示它們,未儲存的變更以粗體
●表示。Tab與Shift-Tab用來切換。規格: BUF-1, BUF-2, UI-4
快到你察覺不到
在專案的基準測試中(release 建置、100,000 行的檔案、面板開啟、語法上色開啟),在 80×24 到 240×60 的螢幕上,單次按鍵在 p99 下至多耗時 1 ms。在有 100,000 個檔案的儲存庫中,第一個畫面會在讀取檔案清單之前就畫出來:實測為 1.8 至 8.7 ms,而需求是 20 ms。任何耗時的操作(走訪目錄樹、詢問 git、為上色做剖析)都在背景執行緒中執行。
規格: SPEED-1, SPEED-2
只有一個可執行檔:sim
原本獨立的
si可執行檔已併入sim:安裝只要一個指令,執行也只要一個指令。核心是一個函式庫sim-editor-core,sim建構於其上。sim --version與sim --help會印出資訊後直接結束,不會碰終端機。規格:
以字母選擇分頁
<Space>bp會為每個分頁標上一個字母,按下該字母即可跳到對應的檔案。<Space>bc以同樣的方式關閉分頁,而且絕不會關閉已修改的檔案。第一次開啟第二個檔案時,會有提示告訴你Tab與Shift-Tab,直到你用過它們三次為止。規格:
與 git HEAD 比對的變更樹
<Space>ge會開啟只包含與HEAD不同的檔案的樹,已暫存、未暫存和未追蹤的都包括,每個檔案帶狀態字母和+n −n,每個資料夾帶合計。按 Enter 以唯讀方式開啟該檔案在HEAD中的版本。規格: GIT-1, GIT-2, GIT-3, GIT-4, DIFF-1, DIFF-3, DIFF-4
舒適閱讀
色彩與版面是計算出來的,不是憑感覺。
取自你自己調色盤的語法色彩
色彩取自終端機的調色盤(以 OSC 4 讀取)。色相保持不變,只調整明度,直到文字相對背景達到 |Lc| 75。關鍵字為紅色,字串與數字為綠色,型別為黃色,函式為青色,註解為灰色斜體;藍色與洋紅色從不用於程式碼。語言依檔名、副檔名或第一行判斷,使用 bat 的語法集。
zh可關閉這些顏色。規格: SYN-1, SYN-2, SYN-4
Markdown 閱讀檢視
在 Markdown 檔案中,除游標所在行外,每一行都依閱讀時的樣子繪製:強調和程式碼標記不畫出來,表格依顯示寬度對齊,標註區塊(
> [!NOTE])顯示該類型的名稱。被隱藏的只有這些標記,絕不會隱藏#、括號、URL 或任何文字字元,<Space>um可顯示原始文字。規格: UI-8, MD-1, MD-10, MD-11
三種外觀
calm 是最樸素的一種:只用四種樣式與一種彩色背景。flat 把差異顯示為綠色與紅色,並替行染上淡色。depth 是預設外觀,加入了邊框、概覽尺規,以及依與游標的距離讓文字漸淡的霧化。
zl可在它們之間循環切換。分不清紅色與綠色的人適合使用 calm。規格: LOOK-1, LOOK-2, LOOK-3
靠量測保證可讀
內文為 |Lc| 90,次要文字為 |Lc| 60(APCA),依終端機背景計算。在 calm 外觀中,唯一的變更色彩在 protan(紅色覺異常)、deutan(綠色覺異常)與 tritan(藍色覺異常)三類色覺下仍可分辨。整個介面中,一種色相只代表一件事:灰色代表結構,藍色代表你操作的位置,綠、琥珀、紅代表變更,洋紅色只代表被隱藏或有危險的東西。
規格: VIS-4, VIS-5, COLOR-1, UI-12
能長住的編輯器
檔案樹中的圖示(需要 Nerd Font;
zi可關閉)、分頁列、作為編輯器標題的麵包屑(src › sim.rs › leader_key)、顯示模式、分支、與 HEAD 的差異和位置的狀態列(只有編碼不是 UTF-8、換行字元不是 LF 時才會寫出)、相對行號、縮排參考線、帶標記的捲軸,以及剛複製的內容上的一次閃爍。規格: UI-2, UI-5, UI-6, UI-10, UI-11
日文及其他 CJK 文字
寬字元佔兩欄,文章依日文禁則(kinsoku)規則換行,依詞移動時會在文字種類改變處切開 CJK 文字,開著輸入法(IME)時,全形按鍵也能當作指令使用。
規格: VIS-7, VI-10
沒有顏色也能用,而且從不只靠顏色
NO_COLOR與少於 8 色的終端機只用粗細、底線與反白來繪製,sim 也不會向終端機請求任何顏色。意義從不只靠顏色傳達:變更的行在符號欄中是┆,資料夾顯示其下最強的 git 狀態的字母,分頁以↯表示檔案在磁碟上已有變動。關閉圖示後,不會繪製任何私有區(private-use)字形。規格:
可能裝有 Nerd Font 的終端機中,圖示預設開啟
圖示需要 Nerd Font,而終端機無法告知自己有沒有。圖示在 Ghostty、kitty 與 WezTerm 中預設開啟,在其他終端機中預設關閉,並在狀態列給出一次性的提示:
zi: icons (needs a Nerd Font)。你用zi做的最後一次選擇永遠優先。規格:
複製時亮起,在每種外觀中都一樣
剛剛複製的內容會亮 150 ms。最樸素的 calm 外觀現在也會亮:用選取範圍的灰色,沒有選取範圍的地方用底線。另一個行程剛剛寫進已開啟檔案的行,會亮 400 ms。
規格: UI-13, UI-19
按鍵
vi 的文法,去掉 vi 的怪癖。
你的手早已熟悉的 vi 按鍵
移動指令、運算子、文字物件、計數、
.、視覺模式、支援 smartcase 的搜尋、:s與範圍,但去掉了 vi 的怪癖:Y複製到行尾,U是重做,Ctrl-s儲存,q結束。方向鍵、Home、End 與 Delete 在任何地方都能用。規格: VI-1, VI-2, VI-3, VI-4, VI-5, VI-6, VI-7
複製的內容會進入系統剪貼簿
每次沒有指定暫存器名稱的複製也會透過 OSC 52 送進系統剪貼簿,在 tmux 裡同樣如此。刪除與修改只會填入暫存器,所以
x和dd永遠不會覆蓋你複製的內容。規格: VI-8
不出意外的滑鼠
按一下可開啟檔案或放置游標,滾輪捲動,拖曳選取。滑鼠自己絕不會編輯、儲存或建立快照。
規格: PTR-1, PTR-2
Space 是 leader 鍵,附帶 which-key 視窗
在前綴鍵(
Space、g、z、Z、[、],或d這類運算子)上稍待片刻,會開啟一個小視窗,列出接下來可以按的鍵。繼續輸入的效果與沒有這個視窗時完全相同。規格:
:help與 F1:可搜尋的全部按鍵清單:help與F1會開啟一份可搜尋的清單,列出每個按鍵與指令,並預覽各自的作用。:help tab能找到Tab、Shift-Tab與<Space>bp。這份清單就是產品唯一的按鍵表,所以不會與按鍵脫節。規格:
搜尋會告訴你目前的位置
搜尋的比對結果以醒目提示標出時,狀態列會顯示游標位於第幾個比對結果,以及總共有多少個:
[3/12]。規格:
Vim 的暫存器
"a到"z保存文字,"A到"Z在其後附加;"0是最近一次複製,"1到"9是最近的幾次刪除,"_接收任何內容卻什麼也不保存。:registers會列出它們。暫存器只存在於記憶體中,所有開啟的檔案共用。沒有指定名稱的複製仍會透過 OSC 52 送進系統剪貼簿;刪除仍不會。規格: VI-15
標記
ma到mz在檔案中設定標記;'a跳到標記所在的行,反引號鍵跳到它的確切位置,也可以搭配運算子使用(d'a)。''回到最近一次跳躍之前游標所在的位置。標記會跟著它所在的文字,經過編輯、復原和來自外部的變更,:marks會列出它們。標記只存在於記憶體中。規格: VI-17
:tutor約十五分鐘的簡短課程,在一個暫存緩衝區裡進行,語言取決於你的地區設定(English、日本語、简体中文、繁體中文、한국어、Español、Português、Français、Deutsch 或 Русский;其他情況用 English)。練習題會在你輸入時自動在 ✗ 和 ✓ 之間切換。
規格: TUTOR-1, TUTOR-2, TUTOR-3, TUTOR-4
路線圖
規劃中,尚未推出。此清單中的任何內容目前都無法使用,順序也不是承諾。
巨集
規劃中
錄製並重播按鍵。sim 目前沒有。
剪貼簿整合
規劃中
比目前透過 OSC 52 複製更進一步。
沙盒中的語言伺服器
規劃中
一個語言伺服器用戶端,其伺服器在沙盒中執行;狀態列中還有一個指示項,顯示專案根目錄是否受信任。
真正有層次感的 GUI
規劃中
帶有真實陰影與高度層次的圖形化前端。目前已作為原型起步,沒有任何可安裝的東西。
更多安裝方式
規劃中
AUR和crates.io 的套件即將推出。