【问题标题】:vim ex scripts and macrosvim ex 脚本和宏
【发布时间】:2022-02-05 11:34:28
【问题描述】:

我有一个在 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”的行中执行这个宏。但它看起来不起作用。

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

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

感谢您的帮助!

【问题讨论】:

    标签: vim ex


    【解决方案1】:

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

    例如,let @q = "something"normal @q 是典型的 Vim 惯用语,我确信我的 ex 实际上是一个相当可用的 Vim 构建,所以我事先知道你的 sn-p 将按预期工作我的机器:

    但是在您的特定情况下使用的ex 可能是一个残缺的 Vim,或者它可能根本不是 Vim,在这种情况下使用 Vim 习语可能不是明智之举。例如,这是我用真正的ex 运行你的 sn-p 的结果:

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

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

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

    【讨论】:

    • 我猜你指向了正确的方向,你的回答对我来说绝对有意义......但不幸的是我的系统(fedora 35)似乎有点滑稽。我执行了你的命令,结果如下:which ex -&gt; /usr/bin/exfile -h /usr/bin/ex -&gt; /usr/bin/ex: symbolic link to /usr/libexec/viex --version -&gt; VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Feb 07 2022 00:00:00)man ex -&gt; VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Feb 07 2022 00:00:00) 所以看起来我正在使用“vim ex”,但它不起作用。
    猜你喜欢
    • 2021-04-23
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2012-01-12
    • 1970-01-01
    • 2012-04-18
    • 2011-01-25
    相关资源
    最近更新 更多