vi/vim 使用 -c 的命令行选项

vi/vim command line options using -c

objective:

/^Mar 找到一个模式,(行以 Mar 开头) GN 找到该模式的最后一次出现 dgg 从当前位置删除到文件顶部 :wq 写入并退出

我试过:

vi -c /^Mar -c GN -c dgg -c wq testfile.log

它抱怨 GN 不是编辑器命令 dgg 不是编辑器命令

然而,当我在 vi 中发出相同的命令时,它们工作得很好。我希望我只是遗漏了一些简单的东西,但我已经在 Google 上搜索了很长时间,显然无法提出正确的问题。

谢谢!

您在 -c 开关之后提供的命令被解释为 Ex 命令,这意味着例如 -c GN 的行为就好像 运行 :GN 在 vim 中一样。在命令前添加 "normal" 以便在正常模式下解释它:

vi -c "/^Mar" -c "normal GN" -c "normal dgg" -c wq testfile.log

命令行中写的命令都是ex命令。它们是在使用 vim 时以“:”为前缀的命令。您可以重写命令行以使用 ex 命令:

vi -c '/^Mar' -c '$' -c '?' -c '1,.d' -c 'wq' testfile.log

这应该与要求的基本相同 - 找到模式,转到最后一行,向后找到模式,删除从开始到当前行的所有内容,写入并退出。