Багаторядковий пошук і заміна у Visual Studio


83

Чи можна це зробити? Ми використовуємо VS2005 та VS2008 та VS2010.

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

Якщо цього неможливо зробити, яку просту та просту (безкоштовну) альтернативу використовують люди? Це не передбачає збиття нашого власного макросу.


3
Якщо ви хочете розглянути додаткове програмне забезпечення / написати макрос, щоб зробити це, я б сказав, що просто перекусите маркер і дізнаєтесь, як використовувати пошук / заміну регулярного виразу. Принаймні він вбудований і має гідну допомогу ...
Дейв Д

3
Я знаю, як зробити регулярний вираз, але будь-який текст із великою кількістю знаків пунктуації потребує надзвичайно багато точного налаштування регулярних виразів. я не можу повірити, що це будь-яка чашка чаю для простої операції пошуку / заміни
hawbsl

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

13
Я не думаю, що це працює, якщо текст заміни також охоплює кілька рядків. Коли ви вставляєте у поле "Замінити на", воно скорочується.
Andrew Corkery

Просто потрібно пов’язати комбінацію клавіш із цим макросом, і це буде просто, як звичайна знахідка та заміна. Щиро дякую за цей фокус!
Самуель

4
Макроси були скасовані у наступних версіях Visual Studio, тому це більше не працює.
Девід Бург

23

Це працює сьогодні у Visual Studio 2012:

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

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

Приклад можна знайти тут .

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

Примітка: до VS2012 шаблон, який працював, був:fooPatternToStart.(.\n)+@.*barPatternToEnd


1
Добре пояснив і працює саме так, як написано на коробці. Враховуючи, що макроси вже давно померли навіть на момент публікації, я вважаю, що це має бути прийнятою відповіддю.
nathanchere

19

Можливо, ви захочете поглянути на цей запис у блозі:

Багаторядковий пошук та заміна у Visual Studio

Надає код макросу, щоб уникнути пошуку та показати діалогове вікно пошуку та заміни VS.


На жаль, це посилання мертве.
Кейд Ру

Все ще працює звідси ... Я також скопіював код у суть за адресою: gist.github.com/3706886 на випадок, якщо це допоможе.
Роберт Адамс,

Мабуть, це була тимчасова проблема.
Кейд Ру

3
Цей макрос перетворено на розширення VS, тому він працює зараз у VS 2012 та 2013. Дивіться helixoft.com/blog/…
Пітер

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

18

Ви можете шукати багаторядкові вирази, клацнувши прапорець "Використовувати регулярні вирази" у діалоговому вікні "Знайти та замінити". Потім розриви рядків позначаються \n.

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


6
Як ми можемо замінити багаторядковим текстом? будь-які ідеї?
Tauseef

2
Можливо, вам доведеться змінити \nна, \r\nякщо у вашому документі є приховані повернення каретки.
James McCormack

У питанні прямо вказано, що не використовуються регулярні вирази. Регулярний вираз повертає назад, що вам потрібно не лише уникнути розривів рядків, але й уникнути всіх символів відповідності, які були б символами втечі регулярного виразу. (проголосуйте за те, щоб не відповісти на запитання)
Девід Бург


2

Його надає лише Microsoft. Будь ласка, перевірте https://visualstudiogallery.msdn.microsoft.com/699CE302-B0D4-4083-BE0E-1682E873CEBF .

Він використовує лише регулярний вираз. Але для тих, хто не знає регулярного виразу, краще використовувати його.


1
Це було моє рішення, все ще застосовне до цієї дати.
chakeda

1

Ви також можете відкрити файли за допомогою UltraEdit, який повністю підтримує заміну MultiLine. Ви можете використовувати пробну версію, якщо ви маєте намір використовувати її лише один раз.


1

Щодо коментаря Ендрю Коркері 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

0

Остання версія (станом на цю публікацію) Notepad ++ робить багаторядковий пошук / заміну. Не знаю, чи це було правдою ще тоді, коли про це запитували. Але без підтримки макросів у Visual Studio це актуально зараз.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.