根据手册页,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 键的一个怪癖?
这是因为
ESC [
也恰好是某些终端上的几个功能键发送的字符序列的开头,例如HomeorEnd或PageUp... 这些也绑定到less
.因此,当
less
收到 a时ESC [
,它会等待更多(不会像其他应用程序那样超时)。在我的终端
ESC[6~
上是PageDown. 如果我按Alt+[,我ESC [
会像你一样看到。但是然后我可以进入6
并且~
确实向下滚动。如果您运行
TERM=vt100 less
而不是less
,则vt100
terminfo 页面没有任何条目Homeor End... 您会看到ESC [
有效。但是,如果您添加
\e[ left-scroll
到您的~/.lesskey
(并运行lesskey
将其编译为~/.less
),您会注意到ESC [
作品向左滚动,但所有Home, PageUP... 停止工作,它们都向左滚动,并且它们发送的额外字符会引起一些哔哔声。查看代码,这完全是关于命令表的处理顺序。
~/.less
命令表最后添加,但插入到头部,因此它的条目在内置条目之前处理。在
ESC [
输入时,如果\e[ left-scroll
首先找到 for 条目,则对其进行处理,如果首先找到 for\kD forw-screen
(在许多终端上转换为\e[6~ forw-screen
),则它只是一个前缀match,并less
等待更多 input。所以,这是一个错误。解决方法是添加超时。然而,增加一个短暂的超时将意味着放弃多键命令;长时间超时以给用户足够的时间输入多键命令可能会导致
ESC [
反应迟钝。现在,具有PageUp等的终端通常也具有Left和Right键,它们也绑定到
left-scroll
,,right-scroll
因此您可能希望使用它来代替滚动。