这里的问题不是匹配冒号,而是你已经被教导vim必须使用冒号分隔它的正则表达式.这是不正确的.
awk/vi/perl/ruby(以及更多)允许您指定所需的wahtever分隔符.该字符是命令字符后面的字符(在我们的例子中是S),例如:
s/hello/there/
s:hello:there:
s@hello@there@
Run Code Online (Sandbox Code Playgroud)
都是相同的正则表达式,只是使用不同的分隔符.这种灵活性意味着如果你经常使用/,但是你需要匹配正则表达式中的/,那么你可以切换到其他一些分隔符,例如:
sMhel/loMthereM
Run Code Online (Sandbox Code Playgroud)
虽然当正则表达式包含文本时"M"可能不是最佳选择 - 但这取决于你的风格以及你真正匹配的内容.
你甚至可以使用括号.对于单个正则表达式,它是:
s[hello]
Run Code Online (Sandbox Code Playgroud)
要么
s(hello)
Run Code Online (Sandbox Code Playgroud)
我认为你可以使用s[hello][there]或甚至可以使用搜索和替换样式s[hello](there).但关于方括号的最后一句是从我使用perl时的半记忆猜测.