Vim 如何选择文本直到第一个字符?
我要替换以下文本中第一个“:”之前的文本:Vim 如何选择文本直到第一个字符?,vim,Vim,我要替换以下文本中第一个“:”之前的文本: S No. 1: This is main text having a colon (:) in it. 我想将上面的内容转换为: This is main text having a colon (:) in it. 我在vim中使用了以下代码: s/\v.+:// 但是,它会将上述文本转换为: ) in it. 如何删除第一个冒号(:)之前的部分?使用贪婪量词的任意字符,对您没有帮助 我刚刚用一个非贪婪量词\{-1,}更改了贪婪量词\+,它
S No. 1: This is main text having a colon (:) in it.
我想将上面的内容转换为:
This is main text having a colon (:) in it.
我在vim中使用了以下代码:
s/\v.+://
但是,它会将上述文本转换为:
) in it.
如何删除第一个冒号(:)之前的部分?使用贪婪量词的任意字符
,对您没有帮助
我刚刚用一个非贪婪量词\{-1,}
更改了贪婪量词\+
,它看起来至少以非贪婪的方式匹配了一次
我刚刚使用了这个ex命令:
:s/^.\{-1,}://
说明:
^
起锚线
任何非行尾字符
\{-1,}
非贪婪量词(至少一个模式实例)。如果您预测可能不会发生任何事件的场景,那么量词\{-}
将更准确(并且更短…归功于Peter Rinkler)
如果您在帮助中查找,:help greedy
,您将找到一个关于如何执行非贪婪搜索的很好的解释
Peter Rinckler还建议您只需创建一个非冒号字符类,例如
[^:::]
来代替
(除行尾字符以外的任何字符),并使用*
量词(字符类的0个或多个实例)
这是替换ex命令的外观:
:%s/^[^:::::*://
除了:s
命令外,您还可以使用:normal
命令:
:%norm! df:
或宏,在第一行,按:
qq0df:j@qq
然后按
@q
您可以将其缩短为\{-}
,例如:%s/^.\{-}/
。我还发现使用否定字符类是很好的,[^:][/code>,例如,:%s/^[^:][*://
@Peter Rincker,同意。这些解决方案看起来既有趣又简单。如果你能解释一下这些代码,那将非常有帮助。