1

我有一个在 bash 脚本中使用 ex 的问题。

我有一个这样的文件

数据.txt

hello
foo
bar
foo
bar
hello
foo
bar
foo
bar
hello

现在我想对所有匹配“hello”的模式运行一个小宏,我想将它修改为“hello world”。

我正在使用这个脚本

ex -s data.txt << script
let @q="A world"
g/hello/normal @q
wq
script

我定义了一个宏并将其放入寄存器 q。之后我在所有匹配“hello”的行中执行这个宏。但看起来它不起作用。

现在我想知道前脚本是否以某种方式受到限制。

我知道有数百种不同的方法可以实现相同的目标,但在这种情况下我想使用宏。

谢谢你的帮助!

4

1 回答 1

4

exex。根据您执行时实际调用的程序ex,可用功能(或它们与各种配置文件交互的方式)可能与您的期望相匹配,也可能不匹配,因此强烈建议在使用之前阅读其文档。

作为一个例子,let @q = "something"并且normal @q是典型的 Vim 习惯用法,我确信 myex实际上是一个相当可用的 Vim 构建,所以我事先知道你的代码片段可以在我的机器上按预期工作:

截屏

但是ex在您的特定情况下使用的可能是残缺的 Vim,或者根本不是 Vim,在这种情况下使用 Vim 习语可能不是明智之举。例如,这是我使用 real 运行您的代码段的内容ex

截屏

将完整的输出添加$ ex --version到您的问题中应该有助于澄清情况。

我知道您对替代方案不感兴趣,但更具防御性的方法是将自己限制在 real 的一部分功能中ex。就像是:

$ ex -s data.txt << script
g/hello/s/$/ world/
wq
script
于 2022-02-05T12:53:20.637 回答