Wielowierszowe znajdowanie i zamienianie w programie Visual Studio

83

Czy da się to zrobić? Używamy VS2005, VS2008 i VS2010.

Nie mam na myśli wyrażeń regularnych - które mają swoje miejsce - ale zwykły stary tekst znajdź i zamień. Wiem, że możemy to zrobić (w mgnieniu oka) za pomocą wyrażeń regularnych przy użyciu znacznika \ n, ale wolimy nie zaplątać się w znaki ucieczki wyrażeń regularnych, a ponadto występuje problem z czytelnością.

Jeśli nie można tego zrobić, z jakiej prostej i prostej (bezpłatnej) alternatywy korzystają ludzie? Nie wymaga to podrzucenia naszego własnego makra.

hawbsl
źródło
3
Jeśli rozważasz dodatkowe oprogramowanie / napisanie makra, aby to zrobić, powiedziałbym, że po prostu ugryź punkt i naucz się, jak używać wyrażenia regularnego znajdź / zamień. Przynajmniej jest wbudowany i ma przyzwoitą pomoc ...
Dave D
3
Wiem, jak robić wyrażenia regularne, ale każdy tekst z dużą liczbą znaków interpunkcyjnych będzie wymagał bardzo dużo dostrojenia regexów. Nie mogę uwierzyć, że to komuś filiżanka herbaty za prostą operację znajdowania / wymiany
hawbsl
1
Zagłosuj na to żądanie funkcji MSConnect, aby spróbować uzyskać wbudowane rozwiązanie tego problemu.
Matt Faus
1
Jakieś aktualizacje dotyczące tego pytania? Z jego komentarzy wynika, że ​​najlepsza odpowiedź nie działa. Byłoby wspaniale, gdyby istniało dobre rozwiązanie na to ...
JoeCool

Odpowiedzi:

65

W końcu to znalazłem ...

Nie ma potrzeby pobierania i ładowania jakichkolwiek zewnętrznych makr.

Działa przynajmniej w Visual Studio 2008 z wbudowanym makrem. :)

Kroki:
1) Wybierz tekst, który chcesz znaleźć.
2) Naciśnij „Alt + F8” lub otwórz „Narzędzia -> Makra -> Eksplorator makr”
3) Kliknij dwukrotnie „Próbka -> Narzędzia -> FindLine”. (Otworzy się pole wyszukiwania z zaznaczeniem załadowanym w polu „Znajdź”. Nie martw się o obcięty tekst pokazany w polu „Znajdź”. Zaufaj mi, pole ma wszystko… sposobem MS na pokazanie tego może być ...: ))
4) Kliknij przycisk „Szybka zamiana” w oknie dialogowym „Znajdź i zamień”. Wpisz tekst zastępczy.
5) I kliknij dowolny z 3 przycisków zgodnie z wymaganiami ... i gotowe. :)

Hurra… to działa… Może nie być prostym sposobem na zrobienie tego, ale wiesz, że z MS… nic nie jest proste i łatwe… :)

SV.
źródło
To nie obsługuje funkcji „znajdowania w plikach”, prawda? Prawie, o ile wiem, jest to tylko jeden plik?
Tom Lianza,
1
@tlianza W VS2010 możesz zmienić okno dialogowe Szybkie wyszukiwanie na Znajdź w plikach lub Zamień w plikach za pomocą przycisków w górnej części ekranu. Tak więc, gdy makro wypełni okno dialogowe szybkiego wyszukiwania, możesz przełączyć się do innego widoku.
AaronSieb
13
Myślę, że to nie działa, jeśli tekst zastępczy obejmuje również wiele wierszy. Po wklejeniu w polu „Zamień na” zostaje obcięte.
Andrew Corkery,
Wystarczy połączyć skrót klawiaturowy z tymi makrami, a będzie to proste jak zwykłe wyszukiwanie i zastępowanie. Bardzo dziękuję za tę sztuczkę!
Samuel
5
Makra zostały wycofane w następujących wersjach programu Visual Studio, więc to już nie działa.
David Burg
23

Działa to dzisiaj w programie Visual Studio 2012:

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

Zobacz, jak (.*\n)+?część pasuje do wielu linii, nie jest chciwa.
fooPatternToStartto jakiś wzorzec wyrażenia regularnego w linii początkowej, a barPatternToEndwzór do znalezienia w innym wierszu poniżej, prawdopodobnie w wielu wierszach poniżej ...

Przykład znaleziony tutaj .

Prosty i skuteczny :)

Uwaga: przed VS2012 działał wzór:fooPatternToStart.(.\n)+@.*barPatternToEnd

woohoo
źródło
1
Dobrze wyjaśnione i działa dokładnie tak, jak jest napisane na pudełku. Biorąc pod uwagę, że makra są martwe dawno temu, nawet w momencie publikowania, uważam, że powinna to być akceptowana odpowiedź.
nathanchere
19

Możesz rzucić okiem na ten wpis na blogu:

Wielowierszowe wyszukiwanie i zamienianie w programie Visual Studio

Udostępnia kod makra umożliwiający uniknięcie wyszukiwania i wyświetlenie okna dialogowego Znajdź i zamień VS.

Robert Adams
źródło
Niestety ten link jest martwy.
Cade Roux,
Nadal działa od tego miejsca ... Skopiowałem również kod do sedna na: gist.github.com/3706886 na wypadek, gdyby to pomogło.
Robert Adams,
To musiał być tymczasowy problem.
Cade Roux
3
To makro zostało przekonwertowane na rozszerzenie VS, więc działa teraz w VS 2012 i 2013. Zobacz helixoft.com/blog/…
Peter Macej
2
@PeterMacej na dzień dzisiejszy nie jest odpowiedź, która linki do rozszerzenia - który ja upvoted - ale najlepiej zamieścić swoje własne odpowiedzi i będę jej akceptacji - od 2014 roku swoją prawdopodobnie rozszerzenie powinno być Zaakceptowany Odpowiedź na to pytanie jest bardzo popularna
hawbsl
18

Możesz wyszukiwać wyrażenia wielowierszowe, klikając pole wyboru „Użyj wyrażeń regularnych” w oknie dialogowym „Znajdź i zamień”. Podziały wierszy są wtedy oznaczone symbolem \n.

wprowadź opis obrazu tutaj

Phillip Ngan
źródło
7
Jak możemy zastąpić tekst wielowierszowy? jakieś pomysły?
Tauseef
2
Może być konieczna zmiana \nna, \r\njeśli dokument zawiera ukryte powroty karetki.
James McCormack
Pytanie wyraźnie nie zawierało wyrażeń regularnych. Wyrażenie regularne ma tę wadę, że nie tylko musisz uciec przed znakami końca wiersza, ale także musisz uciec przed wszystkimi znakami dopasowania, które byłyby znakami ucieczki wyrażenia regularnego. (oddaj głos za brakiem odpowiedzi na pytanie)
David Burg
1

Możesz także otworzyć pliki za pomocą UltraEdit, który w pełni obsługuje zastępowanie MultiLine. Możesz użyć wersji próbnej, jeśli zamierzasz użyć jej tylko raz.

Fedor Alexander Steeman
źródło
1

Odnośnie komentarza Andrew Corkery'ego 19 sierpnia 2011 o 9:52 powyżej:

Jeśli chcesz również określić wielowierszowy ciąg zastępujący, edytuj kod makra i ustaw tekst zastępczy, jak pokazano poniżej. Umożliwi to „dostrojenie” zamiennika za pomocą niewielkich niezbędnych modyfikacji.

 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
zaengi
źródło
0

Najnowsza wersja (od tego postu) Notepad ++ umożliwia wyszukiwanie / zastępowanie wielu wierszy. Nie wiem, czy to była prawda, kiedy o to pytano. Ale bez obsługi makr w programie Visual Studio jest to teraz istotne.

sliderhouserules
źródło