我试图ed
更好地理解 DSL,因为它的版本出现在其他工具中(例如sed
, vim
)。
使用ed
它可以打印接下来的 4 行,使用.,+4n
where.,+4
是从当前行开始并向下延伸 4 行的显式范围。
然而,围绕当前行打印几行作为上下文似乎很重要,值得一些语法糖分。
是否已经有相对于当前行的行范围的缩写ed
?
例如,在下面的成绩单中.,+4n
似乎相当长。
$ touch ~/foo
$ ed '-p* ' ~/foo
0
* 0a
1
2
3
4
5
6
7
8
9
10
11
.
* 5
5
* .,+4n
5 5
6 6
7 7
8 8
9 9
-4,+4n
将打印前四行、当前行和后四行(编号)。另一种写同样东西的方法,稍微短一点,是
-4z8n
. 这将应用z
命令,这不同于p
它首先移动到寻址行(此处-4
)然后显示该行和(此处)8
更多行。这n
使行编号。真正的区别在于,如果您随后zn
再次发出命令(现在没有数字),它将显示接下来的八行(或您在初始z
命令后输入的任何数字)。这两个命令都会更改被认为是“当前行”的内容,并且您必须手动向后移动
-4
,或者在移动之前设置一个标记(使用 egka
)然后移回该标记(使用 eg'a
)。不幸的是,ed
编辑器不接受一次性给出多个命令......请注意,该
z
命令不是标准ed
命令,但受 GNUed
和ed
BSD 系统支持。使用
ex
,该命令.z.5
将显示当前缓冲区的五行,当前行位于中间。在这里,您也可以将光标向下移动到最后显示的行。