Mehrzeiliges Suchen und Ersetzen in Visual Studio


82

Kann es gemacht werden? Wir verwenden VS2005 und VS2008 und VS2010.

Ich meine nicht reguläre Ausdrücke - die ihren Platz haben - sondern einfachen alten Text finden und ersetzen. Ich weiß, dass wir es (zur Not) mit regulären Ausdrücken unter Verwendung des \ n-Tags tun können, aber es vorziehen, nicht in Regex-Escape-Zeichen verwickelt zu werden, und es gibt ein Problem mit der Lesbarkeit.

Wenn dies nicht möglich ist, welche einfache (kostenlose) Alternative nutzen die Menschen? Das bedeutet nicht, unser eigenes Makro zu zerstören.


3
Wenn Sie im Begriff sind, zusätzliche Software in Betracht zu ziehen oder ein Makro dafür zu schreiben, würde ich sagen, beißen Sie einfach in die Kugel und lernen Sie, wie Sie den Regex-Such- / Ersetzungsmodus verwenden. Zumindest ist es eingebaut und hat anständige Hilfe ...
Dave D

3
Ich weiß, wie man Regex macht, aber jeder Text mit viel Interpunktion erfordert eine Menge Regex-Feinabstimmung. Ich kann nicht glauben, dass das
jemandes

1
Abstimmen dieses MSConnect Feature - Anfrage , um zu versuchen eine für diese integrierte Lösung zu erhalten.
Matt Faus

1
Irgendwelche Updates zu dieser Frage? Aus seinen Kommentaren geht hervor, dass die Top-Antwort nicht vollständig funktioniert. Es wäre großartig, wenn es eine gute Lösung dafür
gäbe

Antworten:


65

Ich habe es endlich gefunden ..

Sie müssen kein externes Makro herunterladen und laden.

Es funktioniert in Visual Studio 2008 mindestens mit integriertem Makro. :) :)

Schritte:
1) Wählen Sie den Text aus, den Sie suchen möchten.
2) Drücken Sie "Alt + F8" oder öffnen Sie "Extras -> Makros -> Makro-Explorer".
3) Doppelklicken Sie auf "Beispiel -> Dienstprogramme -> FindLine". (Das Feld "Suchen" wird geöffnet, und Ihre Auswahl wird in das Feld "Suchen" geladen. Machen Sie sich keine Sorgen über abgeschnittenen Text, der im Feld "Suchen" angezeigt wird. Vertrauen Sie mir, das Feld enthält alles. ))
4) Klicken Sie im Dialogfeld "Suchen und Ersetzen" auf die Schaltfläche "Schnell ersetzen". Geben Sie Ihren Ersatz durch Text ein.
5) Und klicken Sie auf eine der 3 Schaltflächen gemäß Ihren Anforderungen ... und fertig. :) :)

Hurra .. es funktioniert .. Vielleicht nicht einfach, aber Sie wissen, mit MS .. nichts ist einfach und unkompliziert .. :)


Dies behandelt nicht "In Dateien finden", oder? Soweit ich das beurteilen kann, handelt es sich nur um eine einzelne Datei?
Tom Lianza

1
@tlianza In VS2010 können Sie das Dialogfeld "Schnellsuche" mithilfe der Schaltflächen oben auf dem Bildschirm in "In Dateien suchen" oder "In Dateien ersetzen" ändern. Sobald das Makro den Schnellfindungsdialog ausgefüllt hat, können Sie zu einer anderen Ansicht wechseln.
AaronSieb

13
Ich denke nicht, dass dies funktioniert, wenn Ihr Ersatztext auch mehrere Zeilen umfasst. Wenn Sie in das Feld "Ersetzen durch" einfügen, wird es abgeschnitten.
Andrew Corkery

Sie müssen nur eine Tastenkombination mit diesen Makros verknüpfen, und es ist einfach wie ein übliches Suchen und Ersetzen. Vielen Dank für diesen Trick!
Samuel

3
In den folgenden Visual Studio-Versionen wurden Makros eingestellt, sodass dies nicht mehr funktioniert.
David Burg

21

Dies funktioniert heute in Visual Studio 2012:

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

Sehen Sie, wie der (.*\n)+?Teil die Übereinstimmung über mehrere Zeilen hinweg macht, ohne gierig zu sein.
fooPatternToStartbefindet sich ein Regex-Muster in Ihrer Startzeile, während barPatternToEndsich Ihr Muster in einer anderen Zeile darunter befindet, möglicherweise in vielen Zeilen darunter ...

Beispiel hier gefunden .

Einfach und effektiv :)

Hinweis: Vor VS2012 funktionierte das folgende Muster:fooPatternToStart.(.\n)+@.*barPatternToEnd


Gut erklärt und funktioniert genau so, wie es auf der Box steht. Angesichts der Tatsache, dass Makros bereits zum Zeitpunkt der Veröffentlichung längst tot sind, sollte dies meiner Meinung nach die akzeptierte Antwort sein.
Nathanchere

19

Vielleicht möchten Sie sich diesen Blogeintrag ansehen:

Mehrzeiliges Suchen und Ersetzen in Visual Studio

Bietet Makrocode, um Ihrer Suche zu entgehen und den VS-Dialog zum Suchen und Ersetzen anzuzeigen.


Dieser Link ist leider tot.
Cade Roux

Funktioniert immer noch von hier aus ... Ich habe den Code auch in eine Liste unter gist.github.com/3706886 kopiert, falls dies hilfreich ist .
Robert Adams

Muss ein vorübergehendes Problem gewesen sein.
Cade Roux

3
Dieses Makro wurde in eine VS-Erweiterung konvertiert, sodass es jetzt in VS 2012 und 2013 funktioniert. Siehe helixoft.com/blog/…
Peter Macej

2
@PeterMacej Ab heute gibt es eine Antwort, die auf Ihre Erweiterung verweist - die ich positiv bewertet habe -, aber im Idealfall veröffentlichen Sie Ihre eigene Antwort und ich werde sie akzeptieren. Ab 2014 sollte Ihre Erweiterung wahrscheinlich DIE akzeptierte Antwort auf diese sehr beliebte Frage sein
Hawbsl

18

Sie können nach mehrzeiligen Ausdrücken suchen, indem Sie im Dialogfeld "Suchen und Ersetzen" auf das Kontrollkästchen "Reguläre Ausdrücke verwenden" klicken. Zeilenumbrüche werden dann durch angezeigt \n.

Geben Sie hier die Bildbeschreibung ein


5
Wie können wir durch einen mehrzeiligen Text ersetzen? irgendwelche Ideen?
Tauseef

2
Möglicherweise müssen Sie zu ändern \n, \r\nwenn Ihr Dokument versteckte Wagenrückläufe enthält.
James McCormack

In der Frage wurde ausdrücklich angegeben, dass keine regulären Ausdrücke verwendet werden. Reguläre Ausdrücke haben den Nachteil, dass Sie nicht nur die Zeilenumbrüche umgehen müssen, sondern auch alle Übereinstimmungszeichen, bei denen es sich um Escapezeichen für reguläre Ausdrücke handelt. (Stimme ab, um die Frage nicht zu beantworten)
David Burg




1

In Bezug auf den Kommentar von Andrew Corkery 19. August 11 um 9:52 oben:

Wenn Sie auch eine mehrzeilige Ersatzzeichenfolge angeben möchten, bearbeiten Sie den Makrocode und legen Sie den Ersatztext wie unten gezeigt fest. Auf diese Weise können Sie Ihren Ersatz mit nur den erforderlichen kleinen Änderungen "optimieren".

 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

Die neueste Version (ab diesem Beitrag) von Notepad ++ bietet mehrzeiliges Suchen / Ersetzen. Ich weiß nicht, ob dies damals der Fall war, als dies gefragt wurde. Da in Visual Studio keine Makrounterstützung mehr vorhanden ist, ist dies jetzt relevant.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.