如何在 ed 中向后滚动

如何在 ed 中向后滚动

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查看下一组(上一组)行也有点麻烦,但如果使用edwith ,可能不会有太大问题rlwrap,它允许您使用 来Up-arrow调用上一个命令。

另一个问题是,在编辑缓冲区的开头,输入一个超出缓冲区开头的相对地址将会出现错误。


z命令是类似 的简写.,+24p,只不过 会24自动替换为终端窗口中可用的行数减 1(除非在 中给出了明确的数字z25)。因此,上面显示的命令-50z可以重写为(类似)

-50;.,+24p

这意味着“在缓冲区中跳回 50 行,然后打印当前行和接下来的 24 行”。 (使用n代替 来p获取编号行。)

相关内容