Специфика использования символов. Причем, некоторые символы нужно экранировать, другие экранирования не требуют. Это напрягает с непривычки, однако.

(, ) - группировка. При использовании необходимо экранировать обратным слешем \

\1, \2, ... - обозначение найденных групп в выражении (первая, вторая, и т.д.). Можно использовать в том же выражении при поиске, а не только при замене

Примеры: /\(o\)\1 - найдет идущие подряд буквы o, например, в слове вooбще


+ - символ повторения группы “от 1 и более вхождений”. При использовании необходимо экранировать обратным слешем \. Интересно, что схожий символ повторения * “от 0 и более вхождений” используется без экранирования

Примеры: /\s* - поиск любого количества пробелов или табуляций от 0 и более

/\s\+ - будет искать от одного и более пробельных символов. Для поиска и вставки символа конца строки необходимо использовать символ \r

Для того чтобы использовать регулярные выражения в стандартной нотации перед выражением необходимо ввести \v.

Поиск двух букв оо запишется так:

/\v(o)\1

Для тех, кому привычнее стандартное написание регулярных выражений полезно добавить в настроечный файл .vimrc (или что у вас там вместо него) следующие строки:

nnoremap / /\v
vnoremap / /\v

так же полезно добовить следующее:

set ignorecase          " умный поиск. Если вы ищете строку, которая состоит только из прописных букв, то поиск будет регистро-независимым, но если один или больше символов в строке заглавные, то искать будет с учетом регистра. Чаще всего это то, что нужно"
set smartcase
set gdefault            " применяет замены к строкам"

Последняя строка позволит опускать символ g в конце выражения поиска и замены

В случае, когда поиск и замену необходимо выполнить сразу в нескольких файлах, следует использовать команды:

:argdo - обработать все файлы в списке аргументов

:bufdo - все буферы

:tabdo - все табы

:windo - все окна в текущем табе

Команда:

:arddo %s/pattern/replace/ge | update

произведет замену во всех файлах из списка аргументов и сохранит их. В случае, если ничего не найдено, то сообщение об этом будет подавлено суфиксом ge

:arg - посмотреть список аргументов

:arg **/*.cpp - сформировать список аргументов (показан рекурсивный обход текущего каталога)

:argadd **/.*h - добавить в список аргументов