vim - 多个 :g and :v commands in one statement

标签 vim

我有这个文件

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/

    相关文章:

    vim - 如何获取当前正在执行的vim脚本的路径

    python - 由于 virtualenv 或 conda,neovim 无法正确找到 python?

    vim - vim中的加号和减号是什么

    python - 将 Vim 指向更新的 Python 版本而不是重新编译

    vim - 如何去除vim中文本的高亮背景?

    vim - 在当前行中的一些词后插入时间戳?

    ruby-on-rails - rails.vim 和自定义 Controller 位置

    vim - 在vim中以可视模式复制行

    python - Vim 只高亮部分 python 语法

    vim - 如何使用 OCaml 进行语法错误检查?