【问题标题】:Delete lines with highlighted text / delete highlighted text删除突出显示文本的行/删除突出显示的文本
【发布时间】:2011-08-31 17:27:33
【问题描述】:

有谁知道怎么删除:

  1. 突出显示文本的行
  2. 所有突出显示的文本自身

(突出显示的文本(搜索后)未选择的文本)


是否有搜索所有突出显示的文本并删除该行的命令? (与我用来突出显示文本的搜索命令或功能无关)

g/pattern/d 命令并不总是删除突出显示的文本
体育/^\(.*\)\(\n\1\)\+$ --> 突出显示所有双线
但是g/^\(.*\)\(\n\1\)\+$/d --> 不会删除所有双行

【问题讨论】:

    标签: vim highlighting


    【解决方案1】:

    好吧,你可以这样删除搜索到的模式:

    :%s/<pattern>//gc
    

    您可以通过这种方式删除带有搜索模式的整行:

    :g/<pattern>/d
    

    【讨论】:

    • 谢谢你记得我删除带有突出显示文本的行是多么容易,但是当文本在使用功能后突出显示时我必须做什么(pe在我的菜单中)并且我想删除所有带有突出显示文本的行?
    • @Remonn 在搜索结果突出显示后,您可以使用最后一个搜索模式寄存器"/。使用 @sixfeetsix 解决方案键入 Ctrl+R,/ 代替 &lt;pattern&gt;,然后 Vim 插入最后一个搜索模式。这样您就不需要一次又一次地重新输入整个模式。
    • 是的,我找到了相同的解决方案。谢谢你的回复:)
    【解决方案2】:

    除了sixfeetsix' answer

    • 要删除所有不包含&lt;pattern&gt; 的行,请键入:g!/&lt;pattern&gt;/d:v/&lt;pattern&gt;/g
    • 为避免在:g/ 之后键入&lt;pattern&gt;,请键入:g/CTRL-r//d 插入搜索寄存器的内容(CTRL-r/ 表示将/) 注册到您正在输入的命令中。

    【讨论】:

    • 搜索寄存器与删除高亮文本不同。体育当我搜索双线时,我使用以下命令: ^\(.*\)\(\n\1\)\+$ 这会突出显示两条双线。当我在 g 命令 g/ctrl-r/d 中插入突出显示的文本时,它只删除一个突出显示的行,而不是两个。
    【解决方案3】:

    如何删除:2)所有高亮文字self

    您可以使用搜索和替换(替代)来执行此操作。

    一般是这样使用的:

    :%s/your_search_here/your_replacement_here/gc
    

    更具体地说,用任何内容替换您的搜索结果(以删除它们):

    :%s/your_search_here//gc
    

    省略末尾的c 将全部替换而不确认。

    输入 :help :s 了解更多信息。

    如何删除:1) 高亮文本行

    要删除整行,您可以进行替换,并将整行与正则表达式 (%s/^.*your_search_here.*\n//g) 匹配,或者您可以使用多次重复 (multi-repeat) 功能。

    一般是这样使用的:

    :g/your_search_here/[cmd]
    

    更具体地说,将它与用于删除一行的普通命令结合使用 (d):

    :g/your_search_here/d
    

    输入:help :g了解更多信息。

    提示

    在进行替换之前获取正确查询的一种简单方法是在命令模式而不是默认模式下进行搜索。

    代替:

    /your_search_here
    

    类型:

    :/your_search_here
    

    然后您可以进入命令模式 (:),按向上键调出您的最后一次搜索,然后编辑该行以将其转换为替代。

    【讨论】:

    • g/pattern/d 命令并不总是删除突出显示的文本 p.e。 /^\(.*\)\(\n\1\)\+$ --> 突出显示所有双线,但 g/^\(.*\)\(\n\1\)\+$/d --> 不删除所有双线
    • @Remonn:但是,如果您扩展搜索以匹配所有所需行(以及尾随换行符)的全部内容,则应该替换。请参阅我对1) 的回答的顶部,其中我提到了替代品:)
    • subsitute 可以(但留下一个空行)。当仅突出显示几个字符时,替换也不会删除整行。我想在突出显示某些内容时删除整行,但我不知道如何执行此操作。
    • @Remonn:相信我,如果你使用得当,替代品会做你想做的事。您必须将搜索更改为“突出显示”(匹配)每一行,并匹配尾随的换行符。然后,当您替换时,您将删除整行以及生成的空行。如果你给我一些示例源文本和搜索文本,我会告诉你如何让它做你想做的事......
    【解决方案4】:

    来自this SuperUser answer

    您可以在 7.4 及更高版本中使用gn(以及向后使用gN)。它取代了v//e 技巧。

    向前搜索最后使用的搜索模式,例如使用 `n`,并启动可视模式以选择匹配项。

    请参阅:help gnthis Vimcast 了解更多信息。

    【讨论】:

      【解决方案5】:

      我想这与这个问题本质上是一样的: Vim: when matching string across multiple lines using \_. in regex, yank command only works for the first line

      它看起来像 Vim 中的一个错误。

      【讨论】:

      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 2021-01-02
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 2014-01-02
      • 2021-01-22
      相关资源
      最近更新 更多