Найти и заменить в visual studio, не заменяя всех вхождений

Я использую ctrl + shift + f, чтобы вызвать "Найти и заменить", перейдя на вкладку "Заменить в файлах".

Я выполняю поиск по регулярному выражению во всем решении (которое содержит около 11000 файлов) для:

#layout(\d+)-top

заменяя это на

#layout$1 .layout-top

Операция изменила много файлов, но когда я после операции открыла некоторый файл css, я все еще могу читать строки, такие как:

#layout5-top,
#layout6-top
{
    width: 960px;
    height: 104px;
    margin: 0 auto;
}

Зачем?

Если я сделаю тот же поиск и заменит этот файл открытым, операция повлияет на файл.

Я могу найти множество файлов, которые, кстати, не изменены.

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

Ответ 1

Я столкнулся с той же проблемой. Это происходит только при использовании регулярного выражения. Я знаю, что файлы сопоставляются, потому что, если я поменю "просто найти файлы", правильные строки будут сопоставляться в файлах. Кажется, это ошибка для меня. Возможно, Microsoft не доверяет нам не стрелять в ногу с помощью регулярных выражений. ;)

Единственный способ решить эту проблему - выбрать вариант:

Replace All откроет все файлы с изменениями для редактирования

enter image description here

Если вы не получите это предупреждение, вы можете отключить его, см. Здесь.

Затем просто введите ALT f l, чтобы сохранить все файлы и закрыть все. Казалось, это сработало, когда было около 200 файлов с заменами (полный поиск файлов был около 10000). Я не уверен, сколько файлов Visual Studio может открыться за один раз, поэтому я предполагаю, что в какой-то момент он больше не будет работать или замены будут упущены, и в этом случае вам может понадобиться запустить его несколько раз.