2017-01-04 53 views
1

我试图用vim regex擦除冒号后的所有内容:以及空格或换行符。以下是我正在使用的文字。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 

我我试图用它来获得至少一种我需要的模式。

回答

0

这似乎给你想要的结果:

:%s/:.\{-}\([ \n]\)/\1/g 
  • : - 字面:。我不确定为什么你在你的问题中逃避了这一点,因为你不需要。
  • . - mach any character。
    • \{-} - 重复零次或多次尽可能少的(“许可”,如在许多其他正则表达式引擎中的*?)。
  • \( - 在替换模式中开始引用新子组。
    • [ - 启动“匹配任何字符
      • - 字面空间
      • \n - 。换行符
    • ] - 结束[
  • \)。 - 结束 子组

在替换模式中,我们使用\1来插入空格或换行符,取决于我们替换的内容。

您也可以使用\_s而不是[ \n],这将匹配所有空格,制表符和换行符。我个人更喜欢[ \n],因为它在正则表达式引擎中更加便携(而\_s是Vim特定的构造)。

请参阅:help <atom>了解更多关于上述任何信息。

0
 
:%s/:[^ ]*//g 

这会删除:后跟零个或多个非空格字符。在行尾换行符将不会受到影响

2

简单,你可以这样做:

:%s/:\S*//g 

\S非空白字符;

相关问题