Многострочный поиск и замена в Visual Studio - PullRequest
69 голосов
/ 16 февраля 2010

Можно ли это сделать? Мы используем VS2005, VS2008 и VS2010.

Я имею в виду не регулярные выражения, которые имеют свое место, а обычный старый текст "найди и замени". Я знаю, что мы можем сделать это (в крайнем случае) с помощью регулярных выражений, используя тег \ n, но предпочитаем не запутываться в escape-символах регулярных выражений, плюс есть проблема с читабельностью.

Если это невозможно сделать, какую простую (бесплатную) альтернативу используют люди? Это не означает, что нам нужно взламывать собственный макрос.

Ответы [ 9 ]

65 голосов
/ 08 июня 2010

Я наконец нашел это ..

Нет необходимости загружать и загружать любые внешние макросы.

Работает в Visual Studio 2008 как минимум со встроенным макросом. :)

Шаги:
1) Выберите текст, который хотите найти.
2) Нажмите «Alt + F8» или откройте «Инструменты -> Макросы -> Macro Explorer»
3) Дважды щелкните «Образец -> Утилиты -> FindLine». (Откроется окно «Найти» с выбранным выбором, загруженным в поле «Найти». Не беспокойтесь об усеченном тексте, отображаемом в поле «Найти». ))
4) Нажмите кнопку «Быстрая замена» в диалоговом окне «Найти и заменить». Введите вашу замену с текстом.
5) И нажмите любую из 3 кнопок согласно вашему требованию ... и все готово. :)

Ура ... это работает .. Возможно, это не простой способ сделать это, но вы знаете, с MS ... нет ничего простого и легкого ..:)

18 голосов
/ 18 февраля 2010

Возможно, вы захотите взглянуть на эту запись в блоге:

Многострочный поиск и замена в Visual Studio

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

14 голосов
/ 18 января 2013

Это работает сегодня в Visual Studio 2012:

fooPatternToStart.*(.*\n)+?.*barPatternToEnd

Посмотрите, как часть (.*\n)+? соответствует нескольким строкам, не жадная.
fooPatternToStart - это шаблон регулярного выражения в вашей стартовой строке, в то время как barPatternToEnd - это ваш шаблон, который можно найти в другой строке ниже, возможно, много строк ниже ...

Пример найден здесь .

Просто и эффективно :)

Примечание: до VS2012, работал шаблон: fooPatternToStart.(.\n)+@.*barPatternToEnd

12 голосов
/ 23 августа 2012

Вы можете искать многострочные выражения, установив флажок «Использовать регулярные выражения» в диалоговом окне «Найти и заменить». В этом случае разрывы строк обозначаются \n.

enter image description here

7 голосов
/ 10 ноября 2014
1 голос
/ 26 марта 2015

Предоставляется только Microsoft. Пожалуйста, проверьте https://visualstudiogallery.msdn.microsoft.com/699CE302-B0D4-4083-BE0E-1682E873CEBF.

Используется только регулярное выражение. Но для тех, кто не знает регулярных выражений, лучше использовать его.

1 голос
/ 14 февраля 2013

Относительно комментария Эндрю Коркери 19 августа '11 в 9:52 выше:

Если вы также хотите указать многострочную строку замены, отредактируйте код макроса и задайте текст замены, как показано ниже.Это позволит вам «отрегулировать» замену только с небольшими необходимыми изменениями.

 Sub FindLine()
    Dim textSelection As TextSelection

    textSelection = DTE.ActiveDocument.Selection
    textSelection.CharLeft(True)
    DTE.ExecuteCommand("Edit.Find")
    DTE.Find.FindWhat = textSelection.Text

    'also preset replacement text with current selection
    DTE.Find.ReplaceWith = textSelection.Text
End Sub
1 голос
/ 20 января 2012

Вы также можете открыть файлы с помощью UltraEdit , который полностью поддерживает замену MultiLine. Вы можете использовать пробную версию, если собираетесь использовать ее только один раз.

0 голосов
/ 23 сентября 2015

Последняя версия (на момент публикации) Notepad ++ выполняет поиск / замену в несколько строк.Я не знаю, было ли это правдой, когда об этом спрашивали.Но теперь, когда в Visual Studio больше нет поддержки макросов, это актуально.

...