Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
在vim和许多其他文本编辑器中,您可以将文件末尾向上滚动到屏幕顶部,同时将其余各行显示为空白。但是在终端中,默认情况下,行尾固定在终端屏幕的末尾,因此您的当前行始终显示在底部。在最后一行和屏幕底部之间添加空白行时,如何滚动当前行?
谢谢。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
在vim和许多其他文本编辑器中,您可以将文件末尾向上滚动到屏幕顶部,同时将其余各行显示为空白。但是在终端中,默认情况下,行尾固定在终端屏幕的末尾,因此您的当前行始终显示在底部。在最后一行和屏幕底部之间添加空白行时,如何滚动当前行?
谢谢。
最佳答案
大多数终端识别VT100样式的滚动区域。您可以使用这些设置来临时设置要滚动的行的限制,然后移动行。
一步步:
保存当前光标位置
查找屏幕上的行数
计算您想保留的最后一个行号(上方)
编写控制顺序以设置刚好超过该行的滚动边距,直到屏幕末端
将光标移动到(屏幕和滚动区域的)最后一行
发送控制序列(或换行符等),以迫使滚动区域向上“索引”
取消滚动边距
恢复光标位置
在脚本中,您可以使用tput
来完成大部分操作,例如,tput sc
保存光标位置tput csr
first last,将滚动区域设置为第一行/最后一行tput cup
最后一个0,将光标移动到滚动区域的最后一行(使用与csr
命令相同的最后一个值)tput ind
索引一次,或tput indn
count索引,按计数行索引。tput rc
恢复光标位置
命令(csr
等)是终端功能,一个终端到另一个终端可能有所不同。
尽管滚动区域得到了广泛使用,但它不在标准(ECMA-48)中。
进一步阅读:tput
, reset
- initialize a terminal or query terminfo database
terminfo - terminal capability data base
10-04 19:07