
我真正喜歡的emacs 緩衝區(甚至ansi-term
、shell
和)的一項功能是能夠將終端中的當前行“居中”,以便螢幕的上半部分仍然包含一些先前的輸出。eshell
C-l
似乎標準(不確定標準的名稱是什麼)終端在C-l
按下時會將當前行移動到視窗頂部。有沒有通用的方法將當前行移動到螢幕中心?如果沒有,有沒有辦法專門針對 iterm2、終端機或某些已移植到 OS X 的終端模擬器執行此操作?
答案1
大多數終端模擬器都可以「做到」這一點,但這需要一些工作:
- 假設您要移動的行位於螢幕底部。
- 如果您想向上移動該行,您可以透過向底行發送轉義序列來捲動(或「索引」)該行,然後(計數!)將行向上移動您想要滾動的行數。
- 滾動會移動螢幕上的所有行。您可以透過設定滾動區域來限制移動的行數。透過這樣做,您可以防止螢幕上半部的線條消失。但是線的原始位置和目標之間的線將會消失。
這只會使隊伍向上移動。同樣,您可以使用“反向索引”向下移動一行。順便說一句,這些操作不在標準ECMA-48,但類似於 xterm(基於 DEC vt100)。 ansi-term
支援滾動/索引。
最後,這只是向上或向下。若要向左/向右移動一行,您可以傳送轉義序列,以便在遊標位於行開頭時插入或刪除字元。
這些轉義序列記錄在terminfo(5)
手冊頁中。我已經提過這些:
csr
(設定滾動區域)
ind
(索引)
rin
(反向索引)
cup
(遊標位置)
ich
(插入字元)
dch
(刪除字元)
延伸閱讀: