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


83

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

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

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


3
Если вы собираетесь подумать о дополнительном программном обеспечении / написании макроса для этого, я бы сказал, просто укусите пулю и узнайте, как использовать поиск / замену регулярного выражения. По крайней мере, он встроен и имеет приличную помощь ...
Дэйв Д.

3
Я знаю, как делать регулярные выражения, но любой текст с большим количеством знаков препинания потребует очень много тонкой настройки регулярного выражения. Я не могу поверить, что это
чья-

1
Проголосуйте за этот запрос функции MSConnect, чтобы попытаться получить для этого встроенное решение.
Мэтт Фаус

1
Есть новости по этому вопросу? Судя по его комментариям, не похоже, что главный ответ полностью работает. Было бы здорово, если бы для этого было хорошее решение ...
JoeCool

Ответы:


65

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

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

Он работает в Visual Studio 2008, по крайней мере, со встроенным макросом. :)

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

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


Это не обрабатывает «поиск в файлах», верно? Насколько я могу судить, он только однофайловый?
Tom Lianza

1
@tlianza В VS2010 вы можете изменить диалоговое окно «Быстрый поиск» на «Найти в файлах» или «Заменить в файлах» с помощью кнопок в верхней части экрана. Итак, как только макрос заполнил диалоговое окно быстрого поиска, вы можете переключиться на другое представление.
AaronSieb 01

13
Я не думаю, что это сработает, если ваш замещающий текст также занимает несколько строк. Когда вы вставляете в поле «Заменить на», оно обрезается.
Эндрю Коркери

Просто нужно связать сочетание клавиш с этим макросом, и это будет просто, как обычный поиск и замена. Большое спасибо за эту выходку!
Самуэль

5
Макросы были удалены в следующих версиях Visual Studio, поэтому это больше не работает.
Дэвид Бург

23

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

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

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

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

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

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


1
Хорошо объяснено и работает именно так, как написано на коробке. Учитывая, что макросы давно мертвы даже на момент публикации, я считаю, что это должен быть принятый ответ.
nathanchere

19

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

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

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


Эта ссылка, к сожалению, мертва.
Cade Roux

Все еще работает отсюда ... Я также скопировал код в суть по адресу: gist.github.com/3706886 на случай, если это поможет.
Роберт Адамс,

Должно быть, временная проблема.
Cade Roux,

3
Этот макрос был преобразован в расширение VS, поэтому теперь он работает в VS 2012 и 2013. См. Helixoft.com/blog/…
Питер Масей

2
@PeterMacej на сегодня есть ответ , который ссылки на ваш добавочный номер - который я upvoted - но в идеале вы размещаете свой собственный ответ , и я буду принимать его - в 2014 ваше расширение , вероятно , должно быть общепринятый ответ на этот очень популярный вопрос
hawbsl

18

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

введите описание изображения здесь


7
Как мы можем заменить многострочным текстом? есть идеи?
Tauseef 05

2
Возможно, вам придется изменить \nна, \r\nесли в вашем документе есть скрытые символы возврата каретки.
Джеймс МакКормак,

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


2

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

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


1
Это было мое решение, все еще применимое к этой дате.
chakeda

1

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


1

Относительно комментария Эндрю Коркери 19 августа 2011 в 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

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.