Проблема здесь заключается не в совпадении двоеточия, а в том, что вас учили, что vim ДОЛЖЕН использовать двоеточие для разделения своего регулярного выражения. Это неверно.
awk / vi / perl / ruby (и многие другие) позволяют вам указать, какой разделитель вам нужен. Этот символ следует за символом команды (в нашем случае символ S), например:
s/hello/there/
s:hello:there:
s@hello@there@
- это все те же регулярные выражения, только с разными разделителями. Эта гибкость означает, что если вы часто используете /, но затем вам нужно сопоставить / в регулярном выражении, то вы можете просто переключиться на какой-либо другой разделитель, например:
sMhel/loMthereM
Хотя «М» может быть не лучшим выбором, когда регулярное выражение содержит текст - это зависит от вашего стиля и того, что вы действительно соответствуете.
Вы даже можете использовать скобки. Для одного регулярного выражения это:
s[hello]
или
s(hello)
Я думаю, что для поиска и замены вы можете использовать s[hello][there]
или, возможно, даже s[hello](there)
. Но это последнее предложение о скобках - наполовину запомненное предположение, когда я уже использовал perl.