BSD ed 和 GNU ed 有z
滚动命令。然而,重复使用该z
命令似乎只能向前滚动。有没有类似的东西z
可以向后滚动而不是向前滚动?
答案1
我假设问题中的“滚动”意味着“显示终端缓冲区中的接下来的几行”,这就是非标准z
命令正在做的事情。移动到其他行是通过按行号、正则表达式或相对地址(如-4
前面的第 4 行)寻址行来完成的,但这不是这个问题的目的,我认为。
您不能以与z
向前滚动相同的简洁方式直接向后滚动(从 eg 开始.z
,然后z
重复地显示缓冲区中的接下来的几行),但您可以使用相对寻址来跳回两次滚动窗口大小,然后从该点向前滚动。
假设您使用 25 行的滚动窗口,并且您想要从最后向后滚动文档。
$z25
-50z
-50z
(等等,使用zn
代替 来z
获取编号行。)
首先显示最后一行$z25
(这还将后续命令的滚动窗口设置z
为 25 行)。然后,每个人-50z
都会将 50 行移回到缓冲区中,然后显示从那里开始的 25 行。
问题是您通常不知道默认的滚动窗口大小(默认情况下,终端中的行数),因此您需要给出明确的滚动行数,如上所述。
输入-50z
查看下一组(上一组)行也有点麻烦,但如果使用ed
with ,可能不会有太大问题rlwrap
,它允许您使用 来Up-arrow调用上一个命令。
另一个问题是,在编辑缓冲区的开头,输入一个超出缓冲区开头的相对地址将会出现错误。
该z
命令是类似 的简写.,+24p
,只不过 会24
自动替换为终端窗口中可用的行数减 1(除非在 中给出了明确的数字z25
)。因此,上面显示的命令-50z
可以重写为(类似)
-50;.,+24p
这意味着“在缓冲区中跳回 50 行,然后打印当前行和接下来的 24 行”。 (使用n
代替 来p
获取编号行。)