根據線上說明頁對於lesskey
,以下鍵綁定到左滾動和右滾動:
\e[ left-scroll
\e] right-scroll
\e( left-scroll
\e) right-scroll
\kl left-scroll
\kr right-scroll
箭頭鍵和Esc-(
/可以正常工作,就像向右滾動Esc -)
一樣,但對於向左滾動則不起作用。相反,它只是在命令列提示符中顯示:Esc-]
Esc-[
ESC[
將此行加入~/.lesskey
函數中作為解決方法:
\e[ left-scroll
但為什麼預設情況下它不起作用?
我在 Debian Stretch 和 Kubuntu 18.04 以及各種終端模擬器上的 XFCE4 中觀察到了這種行為。
$ less --version
less 487 (GNU regular expressions)
Copyright (C) 1984-2016 Mark Nudelman
less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
我考慮過提交錯誤報告,但是已知錯誤和功能請求列表 顯示這是一種已知的行為:
增強請求
[。 。 。 ]
參考編號:175
實作版本:322
新增 ESC-[ 的備用指令。
這實際上是 的限制less
,還是終端處理 Escape 鍵的方式的一個怪癖?
答案1
這是因為它也恰好是某些終端上的幾個功能鍵發送的字元ESC [
序列的開始,例如Home或... 這些也與 中的某些操作綁定。EndPageUpless
因此,當less
收到 時ESC [
,它會等待更多(不會像其他應用程式那樣超時)。
我的終端上ESC[6~
是PageDown.如果我按Alt+[,我會ESC [
像你一樣看到。但隨後我可以輸入6
,~
並且會向下滾動。
如果您運行TERM=vt100 less
而不是less
,其中vt100
terminfo 頁面沒有任何Home或 的條目End...您會看到ESC [
有效。
但是,如果您添加\e[ left-scroll
到您的~/.lesskey
(並運行lesskey
將其編譯為~/.less
),您會注意到ESC [
作品向左滾動,但所有Home, PageUP... 停止工作,它們都向左滾動,並且它們發送的額外字符會導致一些蜂鳴聲。
查看程式碼,一切都與命令表的處理順序有關。命令~/.less
表是最後添加, 但插入頭部,因此它的條目被處理前內建的。
輸入時,如果首先找到ESC [
的條目,則對其進行處理,如果首先找到的條目(在許多終端上翻譯為),則\e[ left-scroll
\kD forw-screen
\e[6~ forw-screen
這只是一個字首匹配, 和less
等待更多輸入。
所以,這是一個錯誤。解決方法是添加超時。然而,添加較短的超時意味著放棄多鍵命令;為使用者輸入多鍵命令提供足夠時間的較長逾時可能會導致回應ESC [
過於遲鈍。
現在,具有PageUp等的終端通常也具有Left和Right鍵,它們也綁定到left-scroll
, right-scroll
,因此您可能想使用它來滾動。