預設配置為什麼是「終端安全」
因為終端機不是每一個組合鍵都收得到。
爾雅內建的預設配置叫 Erya Terminal Safe。它刻意避開三類在很多環境裡按不動的組合:
| 避開什麼 | 為什麼 |
|---|---|
| Ctrl+功能鍵 | macOS 把這些留給系統(切換桌面、Mission Control),程式收不到。 |
| 依賴 Alt/Option 的組合 | Option 在 macOS 上是輸入特殊字元用的;很多終端機要另外設定才會把它當成 Meta 送出去。 |
| 修飾方向鍵(Alt+Shift+← 這類) | 不少終端機根本不會回報這種組合。 |
代價是十六個進階動作預設沒有綁鍵:八個常用語/巨集(見 2.4.8)、四個矩形搬動與一個矩形填滿(見 2.2.6)、兩個段落重排相關(見 3.1.8),以及「顯示游標位置」(狀態列已經有了)。功能都在,只是要自己指定按鍵,完整清單見 4.4.6。
1.0 版原本的完整綁定改名為 Erya Classic 保留下來,按 F2 選一下就換回去。如果你的終端機(Linux 上的 GNOME Terminal、Windows Terminal 等)本來就能回報修飾方向鍵與 Alt 組合,Classic 用起來會順手很多。
內附的十二套配置
在 keymap/ 目錄裡,全部都是可以直接選用的 TOML。
| 檔案 | 適合誰 |
|---|---|
| erya-terminal-safe.toml | 預設值。什麼終端機都能用,跨平台最保險。 |
| erya-classic.toml | 要完整綁定(含常用語、巨集、矩形搬動)的人。 |
| nano.toml | 習慣 nano 的人。 |
| vim.toml | 習慣 vim 按鍵的人(不是模式編輯,只是按鍵配置)。 |
| emacs.toml | 習慣 emacs 的人。 |
| macos.toml | 想用 macOS 應用程式慣例的人。 |
| vscode.toml/vscode-macos.toml | 從 VS Code 過來的人。 |
| visual-studio.toml/visual-studio-macos.toml | 從 Visual Studio 過來的人。 |
| intellij-idea-classic.toml | 從 IntelliJ IDEA 過來的人。 |
| eclipse.toml | 從 Eclipse 過來的人。 |
預設與 Classic 差最多的幾個鍵
| 動作 | Terminal Safe | Erya Classic |
|---|---|---|
| 開啟檔案 | Ctrl+O | Alt+O |
| 另存新檔 | F12 | Ctrl+O |
| 取代 | Ctrl+R | Ctrl+H |
| 重做 | Ctrl+Y | Ctrl+R |
| 刪除目前行 | Ctrl+D | Ctrl+Y |
| 複製 | Ctrl+C | Ctrl+Insert |
| 關閉頁籤 | F11 | Ctrl+F4 |
| 上/下一個頁籤 | F9 / F10 | Ctrl+Shift+Tab / Ctrl+Tab |
| 十六進位檢視 | Ctrl+P | Alt+H |
| 矩形選取 | Ctrl+B | Alt+B |
| 格式化文件 | Ctrl+T | Ctrl+Shift+F |
預設配置的 Ctrl+Y 是重做,Classic 的 Ctrl+Y 是刪除整行;Ctrl+R 也剛好倒過來。換配置之後這一組最容易誤按,換完先看一眼提示列(見 1.3.3)。
在系統設定裡換一套
最簡單的做法,不必碰任何檔案。
- 按 F2 開啟系統設定。
- ↑ ↓ 切到「按鍵配置」那一列(選中的那一列會反白,前面有 ▶)。
- ← → 換配置。清單是從 keymap/ 目錄讀出來的。
- Enter 套用。訊息列說「已套用設定:Erya Classic/正體中文」,而且立刻對所有頁籤生效。
- Esc 取消,什麼都不改。
代表爾雅找不到 keymap/ 目錄。用 ERYA_KEYMAPS_DIR 指到實際位置就好(見 1.2.7)——從 Release 壓縮檔解出來只放執行檔時最常遇到。
按鍵配置編輯器
在爾雅裡面改按鍵,改完另存成自己的 TOML。
| 按鍵 | 做什麼 |
|---|---|
| ↑ ↓ | 選動作。左欄是動作說明,右欄是目前綁的按鍵(空白代表沒綁)。 |
| Enter | 編輯這個動作的按鍵。輸入列會帶出目前的值,多組按鍵用逗號分隔。 |
| Delete | 停用這個動作(等同留空)。訊息列說「已停用選取動作的快捷鍵」。 |
| S | 把整份配置另存成新的 TOML。 |
| Esc | 回到系統設定。 |
- 輸入的按鍵無法解析、或跟別的動作衝突時,訊息列會說「無法更新按鍵配置:…」,並且維持原狀。
- 另存時會問檔名,成功後說「已另存按鍵配置:…」。
- 另存新檔不會覆寫既有檔案。檔名已存在時會失敗,不會默默蓋掉別人的配置。
兩條路:把它存進 keymap/ 目錄,之後 F2 就選得到;或把它放到平台的預設路徑(見 4.1.7),爾雅每次啟動都會自動讀。
設定檔長什麼樣
一個 name 加一個 [bindings] 區段。
先產生一份含全部動作名稱的起點:
erya --print-default-keymap > keymap.toml
| 範例 |
|---|
|
name = "我的配置" [bindings] save = "Alt+S" quit = "Ctrl+X" search = ["Ctrl+W", "Ctrl+F"] toggle_rectangular_selection = "Alt+M" redo = [] |
- 一個動作可以綁多個按鍵:寫成陣列。
- 空陣列 [] 代表停用這個動作。
- 沒列出來的動作沿用預設值。所以只想改兩個鍵的話,檔案裡就只要寫那兩行。
- name 是顯示在系統設定與第一列標題上的名稱。
- 動作名稱的完整清單見 4.4,或直接看 --print-default-keymap 的輸出。
按鍵名稱怎麼寫
修飾鍵用 + 串起來,大小寫都可以。
| 類別 | 可以寫的名稱 |
|---|---|
| 修飾鍵 | Ctrl、Alt、Shift、Super、Hyper、Meta |
| 一般字元 | A–Z、0–9、符號 |
| 功能鍵 | F1 到 F24 |
| 方向與編輯鍵 | Left、Right、Up、Down、Home、End、PageUp、PageDown、Insert、Delete、Backspace、Tab、Enter、Esc |
寫法例:"Ctrl+S"、"Alt+Shift+Right"、"F12"、"ctrl+shift+f"(大小寫不分)。
單獨的 F1 保留給按鍵說明,寫進設定檔會被判定為錯誤(見 1.3.8)。這是刻意留的逃生門——不管配置被改成什麼樣子,永遠有一個鍵叫得出完整清單。
設定檔放哪裡才會被讀到
三種指定方式,由高到低。
- --keymap <檔案>——這一次執行用這一份,優先度最高。
- ERYA_KEYMAP 環境變數——沒給 --keymap 時用它。
- 平台的預設路徑——上面兩個都沒有時,自動去這裡找:
| 平台 | 路徑 |
|---|---|
| macOS | ~/Library/Application Support/Erya/keymap.toml |
| Linux | $XDG_CONFIG_HOME/erya/keymap.toml,沒設 XDG 時用 ~/.config/erya/keymap.toml |
| Windows | %APPDATA%\Erya\keymap.toml |
爾雅不會自己建這個檔。找不到就用內建的預設配置,不會有任何警告。反過來說,明確指定的 --keymap 或 ERYA_KEYMAP 讀不到時會在訊息列講話——因為那是你明講要用的東西。
衝突與回退
設定檔有問題時,爾雅照跑,但用預設值。
- 兩個動作綁到同一個按鍵——直接判定為衝突。因為爾雅無法決定該執行哪一個。
- 按鍵名稱拼錯、TOML 語法有問題——解析失敗。
- 把單獨的 F1 綁給某個動作——保留鍵,不接受。
以上任何一種情況,爾雅都會回退到完整的預設配置(不是「只忽略有問題的那一行」),並在啟動時的訊息列說明原因。程式不會因此開不起來。
看畫面第二列的提示列(顯示的是實際按鍵),或按 F1 看完整清單,或按 F2 看系統設定上寫的配置名稱。三個地方都會告訴你真相。
常見錯誤
改按鍵最常見的七個狀況。
| 現象 | 原因與處理 |
|---|---|
| 改了設定檔卻沒生效 | 檔案不在會被讀到的位置(4.1.7),或設定檔有問題被回退了(4.1.8)。看啟動時的訊息列。 |
| 啟動時說「無法載入按鍵設定」 | 衝突或語法錯誤。訊息列後面會寫原因(4.1.8)。 |
| F2 的配置清單是空的 | 找不到 keymap/ 目錄。設 ERYA_KEYMAPS_DIR(4.1.3)。 |
| 綁了 Alt+ 組合按不動 | 終端機沒把 Option/Alt 當成 Meta 送出。改綁別的鍵,或在終端機設定裡開啟(4.1.1)。 |
| 綁 F1 被拒絕 | F1 是保留鍵(4.1.6)。 |
| 另存配置失敗 | 檔名已經存在。爾雅不覆寫既有檔案,換個名字(4.1.4)。 |
| 換配置之後復原變成刪行 | Ctrl+Y 在兩套配置裡意思不同(4.1.2)。 |