VIM - 同一行上多个命令的第一个命令被忽略

标签 vim command

我正在从多个文件中提取信息,并编写了以下命令:

:g!/Value/d | %s/.*=//ge | %s/\;//ge | %y

它基本上是这样的: '删除没有“值”的行 |删除 = 符号 | 之前的所有内容消除 ”;” |全部复制到注册'

但第一个 :g!/Value/d 被忽略,似乎 %y 不知何故导致它被忽略为

:g!/Value/d | %s/.*=//ge | %s/\;//ge

正确清理文档。

我还尝试从命令执行中获取日志,但没有任何帮助。

我不明白最后一个命令如何影响第一个命令。

最佳答案

| 命令分隔符根据命令的不同具有不同的优先级,如 :help :bar解释说。对于 :global 命令,它(以及后续命令)被视为命令参数本身的一部分。这意味着您的替换和复制不会执行一次(在 :global 之后),而是实际上:global 选择的每一行上执行!

您已经找到了正确的解决方法:通过将命令包装在 :execute 中(尊重 | 命令分隔)并引用它,以下命令仅是在第一个命令后进行评估。

关于VIM - 同一行上多个命令的第一个命令被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58555326/

相关文章:

Django 和 Azure Web 应用程序 : Run command on deployment

删除时vim切换缓冲区覆盖行为

php - 如何更改 Vim vimrc 以了解何时键入 PHP 变量并匹配颜色?

vim - gvim 中的 GTK 滚动条大小

linux - 在 CSV 的列中搜索模式并使用 sed 命令替换同一行中的另一个模式

python - 使用 argparse 定义参数的顺序 - Python

wpf - MVVM 命令后更新 UI 的方式是什么?

debugging - 如何查看哪些插件导致 Vim 变慢?

vim - 如何从 vim 中删除此 "Auto Commands"消息?

database - PostgreSQL "DESCRIBE TABLE"