vim ex 脚本和宏

vim ex scripts and macros

我对在 bash 脚本中使用 ex 有疑问。

我有一个这样的文件

data.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”的行中执行这个宏。但是好像不行。

现在我想知道 ex 脚本是否受到某种限制。

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

感谢您的帮助!

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

例如,let @q = "something"normal @q 是典型的 Vim 习语,我确信我的 ex 实际上是一个相当有用的 Vim构建,所以我事先知道您的代码片段可以在我的机器上按预期工作:

但是在你的具体情况下使用的 ex 可能是一个残缺的 Vim,或者它可能根本不是 Vim,在这种情况下使用 Vim 成语可能不是明智之举。例如,这是我得到的 运行 你的代码片段真实 ex:

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

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

$ ex -s data.txt << script
g/hello/s/$/ world/
wq
script