在 vim 和许多其他文本编辑器中,您可以将文件末尾向上滚动到屏幕顶部,同时将其余行显示为空白。但在终端中,默认情况下,行尾固定在终端屏幕的末尾,因此当前行始终显示在底部。如何向上滚动当前行,同时在最后一行和屏幕底部之间添加空白行?
谢谢
答案1
转义序列\e[B
和\e[A
分别将光标向下和向上移动,限制在视口内。转义序列\eD
(称为“索引”)和(“反向索引”)也向下和向上移动,但如果需要,还会滚动视口。(请注意后者\eM
缺少字符。)[
我建议您打印几个“索引”字符,然后打印相同数量的“光标向上”(或“反向索引”)。例如:
echo -ne '\eD\eD\eD\e[A\e[A\e[A'
将光标向下移动 3 行,必要时滚动整个视口,然后将其向上移动。实际上,它可以确保屏幕底部至少有 3 个空行。
您可以将它挂接到您的$PS1
(主 shell 提示符),只需确保它被括在和之间\[
,\]
以便 shell 知道这些字符不会水平移动光标,例如:
PS1='\[\eD\eD\eD\e[A\e[A\e[A\]prompt$ '
您还可以选择从 打印它$PROMPT_COMMAND
,在这种情况下,如果我没记错的话,它需要用0x01
( ^A
) 和0x02
( ^B
) 字节括起来。
注意:快捷键\e[3A
和\e[3B
上下移动光标 3 行(当然,你可以用任意数字代替 3)。“索引”和“反向索引”序列没有这样的快捷键。
我将把它留给你作为练习,让你根据终端的高度以编程方式找出你喜欢的行数。