我试图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
答案1
-4,+4n
将打印前四行、当前行和后四行(编号)。
写同样的东西的另一种方式是稍微短一些-4z8n
。这将应用该z
命令,其不同之处p
在于它首先移动到指定的行(此处-4
),然后显示该行和(此处)8
更多行。使n
行编号。真正的区别在于,如果你给出命令zn
再次(现在没有数字),它将显示下一个八行(或者您在初始z
命令后输入的任何数字)。
这两个命令都会更改所谓的“当前行”,并且您必须使用 手动向后移动-4
,或者在移动之前设置一个标记(使用eg ka
),然后移回该标记(使用eg 'a
)。不幸的是,编辑ed
器不接受一次性给出多个命令......
请注意,该z
命令不是标准ed
ed
命令,但 GNU和ed
BSD 系统都支持。
使用 时ex
,该命令.z.5
将显示当前缓冲区的五行,当前行位于中间。在这里,您也可以将光标向下移动到最后显示的行。