我有这个文件
foo
foo bar
foo bar baz
bar baz
foo baz
baz bar
bar
baz
foo 42
foo bar 42 baz
baz 42
我想要
foo
的行并且不包含 bar
foo
的行并且不包含 bar
我在某处阅读(找不到链接)我必须使用 :exec 和
|
为了这。我尝试了以下,但它不起作用
:exec "g/foo" # works
:exec "g/foo" | exec "g/bar" -- first returns lines with foo, then with bar
:exec "g/foo" | :g/bar -- same as above
当然,如果我不能选择一行,我就不能执行
normal dd
在上面。有任何想法吗?
编辑
赏金注意事项:
我正在寻找一种使用正确的 :g 和 :v 命令的解决方案,并且不使用正则表达式黑客,因为条件可能不同(我可以有 2 个包含,3 个排除)。
另请注意,最后两个不起作用的示例,它们仅用于删除行,但是当我在不删除的情况下运行它们(即查看选定的行)时,它们返回不正确的信息,并且它们的行为如上所述。
最佳答案
我不是 vim 向导,但是如果您只想“删除包含 foo 且不包含 bar 的行”,那么应该这样做(我尝试了您的示例文件):
:v /bar/s/.*foo.*//
编辑:实际上这会留下空行。您可能希望向第二个搜索模式添加一个可选的换行符。
关于vim - 多个 :g and :v commands in one statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11807713/