Vim:删除所有包含模式的行的字符

标签 vim

我正在学习 power of g并且想要删除包含表达式的所有行,直到句子的末尾(用句点标记)。像这样:
There was a little sheep. The sheep was black. There was another sheep.
(运行命令查找所有类似 There was 的句子并删除到下一个句点)。
The sheep was black.
我试过了:

  • :g/There was/d\/\.试图“向前删除直到下一个时期”,但我得到了 trailing characters错误。
  • :g/There was/df.但得到一个 df. is not an editor command error.

  • 有什么想法吗?

    最佳答案

    g 相关的操作必须能够在线上操作,而无需来自 g 的模式匹配的位置信息。暗示。在您使用的命令中,delete forward 命令需要一个未提供的起始位置。

    问题是g仅表示行匹配,而不是模式匹配的特定字符位置。我做了以下事情,它做了我认为你想要的:

    :g/There was/s/There was[^.]*[.]//
    

    这找到了与模式匹配的行 There was ,并执行了正则表达式 There was[^.]*[.] 的替换用空字符串。

    这相当于:
    :1,$s/There was[^.]*[.]//g
    

    我不确定是什么 g正在让您进入您的用例,除了自动应用到整个文件行范围(与 1,$% 相同)。 g在后一个示例中,与将替换应用于同一行上的所有模式有关,而不是与受替换命令影响的行范围有关。

    关于Vim:删除所有包含模式的行的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460663/

    相关文章:

    bash - tmux C-i 键会杀死 bash 补码吗?

    linux - 是否可以在 vim 中为 'specific symbol' 提供用户定义的颜色?

    vim gg=G html 和 jinja2

    vim - 当我退出插入模式时,如何防止 Vim 复制我的文本?

    vim - Gvim 使用鼠标折叠切换

    vim 在文件名中放置时间戳

    vim - 跳[前进到下一行的字母

    vim - 如何将可视范围传递给没有数字或使用 :command in vim? 的函数

    vim - 使 gf 匹配 python 导入

    ruby-on-rails - 用于 Ruby 的 vim 中的全局 "Go to definition"?