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,同意。这些解决方案看起来既有趣又简单。如果你能解释一下这些代码,那将非常有帮助。