Vim regex删除冒号和空格或换行符之间的所有内容

Vim regex删除冒号和空格或换行符之间的所有内容,regex,vim,Regex,Vim,我试图使用vim regex擦除冒号:和空格或换行符后的所有内容。下面是我正在处理的文本 ablatives ablative:ablative_A s:+PL abounded abound:abound_V ed:+PAST abrogate abrogate:abrogate_V abusing ab:ab_p us:use_V ing:+PCP1 accents' accent:accent_N s:+PL ':+GEN accord

我试图使用vim regex擦除冒号
和空格或换行符后的所有内容。下面是我正在处理的文本

ablatives       ablative:ablative_A s:+PL
abounded        abound:abound_V ed:+PAST
abrogate        abrogate:abrogate_V
abusing ab:ab_p us:use_V ing:+PCP1
accents'        accent:accent_N s:+PL ':+GEN
accorded        accord:accord_V ed:+PAST
因此,我想从中得到以下信息:

ablatives       ablative s
abounded        abound ed 
abrogate        abrogate
abusing ab us ing
accents'        accent s '
accorded        accord ed
我对这一点很迷茫,但我尝试了以下陈述:

:s/\:. / /g

我正在尝试使用它来获得至少一种我需要的模式。

这似乎可以提供您想要的结果:

:%s/:.\{-}\([ \n]\)/\1/g
  • –文字
    。我不知道你为什么在你的问题中逃避这个,因为你不需要
  • –任意字符。
    • \{-}
      –尽可能少地重复零次或多次(“ungreedy”,如许多其他regexp引擎中的
      *?
  • \(
    –为替换模式中的引用启动新的子组。
    • [
      –start”匹配这些字符中的任何一个。
      • –文字空间
      • \n
        –换行符
    • ]
      –结束
      [
  • \)
    –结束子组
在替换模式中,我们使用
\1
插入空格或换行符,具体取决于替换的内容

您也可以使用
\\u s
而不是
[\n]
,这将匹配所有空格、制表符和换行符。我个人更喜欢
[\n]
,因为这在regexp引擎中更具可移植性(而
\\u s
是一种特定于Vim的构造)

有关上述任何一项的更多信息,请参见
:help

:%s/:[^ ]*//g :%s/:[^]*//g
这将删除后跟零个或多个非空格字符的
。行尾的换行符不会受到影响,只需执行以下操作:

:%s/:\S*//g

\S
非空白字符