游標移動的每一個鍵
方向鍵那一組是固定的,不會被按鍵配置改掉。
| 按鍵 | 動作 | 備註 |
|---|---|---|
| ↑ ↓ ← → | 移動游標 | 固定鍵。左右是一次一個「字」,不是一個位元組(見 2.2.3)。 |
| PageUp PageDown | 上下翻一頁 | 固定鍵。一頁=內容區的高度。 |
| Home End | 行首/行尾 | 固定鍵。 |
| Ctrl+A Ctrl+E | 行首/行尾 | 可自訂。給不方便按 Home/End 的鍵盤用。 |
| Ctrl+Home Ctrl+End | 文件開頭/結尾 | 固定鍵。 |
| Ctrl+G | 跳到指定行/欄 | 見 2.2.2。 |
- 行尾再按 → 會跳到下一行的開頭,行首按 ← 會跳到上一行結尾。
- 上下移動時,爾雅會記住你原本在第幾欄:經過一段短行再回到長行,游標會回到原本的欄位,不會被短行「吃掉」。
- 行比畫面寬時,游標往右移會自動水平捲動;關掉自動換行時尤其常見(見 2.2.9)。
倒數第二列一直顯示 行:欄,不用特別去查。爾雅另外有一個「顯示目前游標位置」的動作會把它印在訊息列,但預設沒有綁按鍵——因為狀態列已經有了(見 4.4.6)。
跳到指定行與欄
Ctrl+G,可以只給行號,也可以給「行:欄」。
- 只打 42 就跳到第 42 行的行首。
- 打 42:8 跳到第 42 行第 8 欄。
- 行號超過文件長度時會停在最後一行;欄超過該行長度時會停在行尾。
- 格式打錯(負數、有英文字母)會顯示「位置格式錯誤;請輸入正整數行號,或使用 行:欄」,然後再問一次。
- 跳到之後訊息列會回報「已跳至第 120 行,第 16 欄」。
error[E0308]: src/main.rs:120:16 這種訊息,把 120:16 抄進 Ctrl+G 就到位了。這也是十六進位檢視裡跳位移用的同一個鍵(見 3.3.4)。
一次移動一個「字」
爾雅移動與刪除的單位是 Unicode 字素叢集,不是位元組,也不是碼位。
這件事平常沒感覺,但在下面幾種內容上差很多:
| 內容 | 按一次 ← | 其他編輯器常見的狀況 |
|---|---|---|
| 中文「漢」 | 整個字過去 | 大致相同 |
| Emoji 👨👩👧👦 | 整組過去 | 可能一次只跳一個組件,畫面上看起來卡住或裂開 |
| 注音組合字 ㄅ+ˋ | 整個字過去 | 可能把聲調跟本體拆開 |
| 膚色修飾符 👍🏽 | 整組過去 | 可能剩下一個沒有膚色的👍 |
刪除、覆寫、選取用的也是同一個單位,所以按一次 Backspace 刪掉的就是你看到的那一個字,不會留下半截的殘骸。
狀態列的 行:欄 是第幾個字;畫面上的水平位置則是第幾欄,全形字佔兩欄、Tab 依寬度展開。所以一行純中文的第 5 個字,在畫面上會落在第 9 欄。Ctrl+G 的欄位輸入用的是前者(字),跟狀態列一致。
一般選取
按住 Shift 移動游標就是選取。
- Shift 加任何一個移動鍵都能延伸選取:方向鍵、Home/End、PageUp/PageDown、Ctrl+A/Ctrl+E。
- 反方向移動會縮回來,不是重新開始選。
- 選取範圍是灰底黑字,跨行也沒問題。
- 狀態列的模式那一格會變成 選取,訊息列回報選了幾個字元。
- Esc 取消選取;不小心打了字則會取代掉整個選取範圍。
爾雅目前沒有一鍵全選。要選整份文件請按 Ctrl+Home 到開頭,再按 Ctrl+Shift+End——如果你的終端機傳得出這個組合的話。傳不出來時就用 Shift+PageDown 連按幾次。(Ctrl+A 在爾雅是「行首」,不是全選。)
矩形選取
選一個長方形範圍,適合處理對齊的表格與程式碼。
- 按 Ctrl+B 設定起點。訊息列會說「矩形選取起點已設定;使用方向鍵延伸」。
- 用方向鍵拉出長方形。上下決定涵蓋幾行,左右決定每行取到第幾欄。
- 再按一次 Ctrl+B(或 Esc)取消。
矩形選取範圍一樣可以剪下、複製、貼上、刪除,還多了兩個專屬動作(填滿與整塊搬動,見 2.2.6)。
自動換行會把一行拆成好幾列顯示,矩形的「第幾欄」就失去意義了,所以爾雅讓兩者互斥:
- 矩形選取期間按 Ctrl+L:「矩形選取期間無法開啟自動換行;請先取消矩形選取」
- 自動換行開著時按 Ctrl+B:「自動換行期間無法使用矩形選取;請先關閉自動換行」
先按 Ctrl+L 關掉自動換行,再開矩形選取就好。
填滿與搬動矩形
兩個很好用、但預設沒有綁按鍵的動作。
| 動作名稱 | Erya Classic 的鍵 | 做什麼 |
|---|---|---|
| fill_rectangle | Alt+F | 問你一個字元,把整個矩形範圍填滿它。常拿來畫分隔線或補空白對齊。 |
| move_rectangle_left | Alt+Shift+← | 把矩形範圍內的內容整塊搬到隔壁,四個方向各一個動作。碰到邊界時會擋下來並說「矩形選取範圍無法再往該方向移動」。 |
| move_rectangle_right | Alt+Shift+→ | |
| move_rectangle_up | Alt+Shift+↑ | |
| move_rectangle_down | Alt+Shift+↓ |
因為 Alt 組合與修飾方向鍵在很多終端機裡傳不進來(見 1.3.9)。要用的話有兩條路:換成 Erya Classic 配置(F2 選一下就好),或在按鍵配置編輯器裡自己指定幾個按得動的鍵(見 4.1.4)。沒綁鍵之前,這些功能在 F1 說明裡會顯示成空白。
沒有矩形選取範圍就按填滿或搬動,訊息列會說「請先建立矩形選取範圍」。順序是 Ctrl+B → 方向鍵拉範圍 → 再按動作鍵。
剪下、複製、貼上
沒有選取範圍時,剪下與複製的對象是「目前這一行」。
| 按鍵 | 有選取時 | 沒有選取時 |
|---|---|---|
| Ctrl+C | 複製選取範圍 | 複製整行 |
| Shift+Delete | 剪下選取範圍 | 剪下整行 |
| Ctrl+K | 剪下目前行(不管有沒有選取) | |
| Ctrl+V / Shift+Insert | 貼上;有選取範圍時會取代掉它 | |
| Ctrl+D | 刪除目前行(不進剪貼區) | |
Ctrl+C 複製的東西只存在爾雅裡面,可以跨頁籤貼上,但貼不到瀏覽器或 Word。反過來也一樣:從別的程式複製的東西,要用終端機自己的貼上(macOS 是 ⌘V、Windows Terminal 是 Ctrl+Shift+V、Linux 多半是 Ctrl+Shift+V 或滑鼠中鍵)送進來。爾雅支援 bracketed paste,所以這樣貼進來的整段文字會被當成一次貼上處理,訊息列會回報「已貼上 N 個字元」。
用終端機的滑鼠選取+複製。這是終端機層級的功能,跟爾雅無關——所以會連著行號以外的畫面元素一起選到,選的時候避開狀態列就好。
剪行、刪行與插入/覆寫
三個每天都會按到的小動作。
剪行與刪行
- Ctrl+K 剪下目前行:整行進剪貼區,可以貼回別的地方。連按幾次就是搬走好幾行。
- Ctrl+D 刪除目前行:整行消失,不進剪貼區,剪貼區裡原本的東西也不會被蓋掉。
- 兩個都可以用 Ctrl+Z 復原。
插入與覆寫
- Insert 切換。狀態列的模式那一格會在 插入 與 覆寫 之間換,訊息列也會說「已切換為覆寫模式」。
- 插入:打字把後面的字往右推。預設值。
- 覆寫:打字蓋掉游標所在的字。要就地改表格數字時很方便。
MacBook 的鍵盤上沒有這個鍵。兩個解法:在按鍵配置編輯器裡把 toggle_insert 綁到別的鍵,或換成 Erya Classic 配置——它同時綁了 Insert 與 Alt+I(見 4.1.2)。十六進位的位元組編輯另外提供了 I 鍵,那是那個畫面專屬的(見 3.3.7)。
自動延續縮排
按 Enter 建立新行時,爾雅會自動延續目前行開頭的空白與 Tab。寫 YAML、程式碼或條列式筆記時不用每次重打縮排;不需要的時候按 Backspace 退掉即可。
常見錯誤
移動與選取最容易卡住的六個狀況。
| 現象 | 原因與處理 |
|---|---|
| 按 Ctrl+A 沒有全選 | 爾雅的 Ctrl+A 是「移到行首」。沒有全選動作(2.2.4)。 |
| 按 Ctrl+C 沒有中斷程式 | 它是「複製」。離開請按 Ctrl+X(1.1.7)。 |
| 看不到行的後半段 | 行比視窗寬。按 Ctrl+L 開自動換行,或按 End 讓它水平捲過去。 |
| 按 Ctrl+B 沒反應,訊息說自動換行 | 兩者互斥。先 Ctrl+L 關掉自動換行(2.2.5)。 |
| 矩形填滿/搬動按了沒事 | 預設沒有綁按鍵。換 Erya Classic 或自己綁(2.2.6)。 |
| 從瀏覽器複製的字貼不進來 | 要用終端機的貼上(⌘V / Ctrl+Shift+V),不是爾雅的 Ctrl+V(2.2.7)。 |