Gewusst wie: Automatisieren des Suchens und Ersetzens von Text

Mit Visual Studio können Sie Text in Dokumenten suchen und ersetzen, die in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) geöffnet sind oder sich in Dateien auf dem System befinden. Die gängigste Vorgehensweise besteht dabei in der Verwendung der FindReplace-Methode und der Execute-Methode des Find-Objekts. Das TextSelection-Objekt und das EditPoint-Objekt bieten außerdem die FindPattern-Methode. Weitere Informationen finden Sie unter der FindPattern-Methode unter Gewusst wie: Steuern des Code-Editors (Visual Basic).

Tipp

Der vsFindOptionsMatchInHiddenTex[t]-Konstantenwert in der [vsFindOptions]-Enumeration gilt nicht für die FindPattern-Methode, da diese sämtlichen Text, einschließlich ausgeblendetem Text, durchsucht.

Die Version von Find im EnvDTE80-Namespace heißt Find2. Dieses Objekt stimmt mit dem Find-Objekt überein, bietet jedoch eine neue Eigenschaft mit dem Namen WaitForFindToComplete. Wenn diese boolesche Eigenschaft den Wert True aufweist, wird der Suchvorgang erst abgeschlossen, nachdem alle ausgewählten Dokumente durchsucht wurden.

Angenommen, 100 Dokumente sollen nach einem bestimmten Wort durchsucht werden. In diesem Fall erhalten Sie möglicherweise unvollständige Ergebnisse, wenn Sie nicht entweder die WaitForFindToComplete-Eigenschaft verwendet oder das FindDone-Ereignis behandelt haben. Beide Methoden funktionieren, allerdings können Sie durch Festlegen der WaitForFindToComplete-Eigenschaft schneller und einfacher sicherstellen, dass zunächst alle Dokumente durchsucht und erst dann die Suchergebnisse angezeigt werden.

Tipp

Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen. Bei der Entwicklung dieser Verfahren war die Option Allgemeine Entwicklungseinstellungen aktiviert. Wählen Sie im Menü Extras die Option Einstellungen importieren und exportieren aus, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Arbeiten mit Einstellungen.

Beispiel

In den folgenden Beispielen wird gezeigt, wie die verschiedenen Member des Automatisierungsmodells für die Suche verwendet werden und wie auf sie verwiesen wird. In diesem Beispiel wird zuerst ein Text erstellt. Danach werden verschiedene Methoden zum Suchen und Ersetzen von Text angewendet. Um dieses Beispiel auszuführen, ersetzen Sie die OnConnection-Methode in einem einfachen Add-In durch den folgenden Code. Um verschiedene Abschnitte dieses Beispiels zu starten, entfernen Sie den Kommentar des entsprechenden Codes. Stellen Sie vor dem Ausführen dieses Codes sicher, dass die Eigenschaft "Interoptypen einbetten" des EnvDTE-Assemblyverweises auf "False" festgelegt ist.

Public Sub OnConnection(ByVal application As Object, ByVal _
connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    searchReplace(_applicationObject)
End Sub

Public Sub searchReplace(ByVal dte As DTE2)
    Dim findWin As Find2
    Dim doc As Document
    Dim textDoc As TextDocument
    Dim textSel As TextSelection
    Dim iCtr As Integer

    ' Create a new text file.
    dte.ItemOperations.NewFile("General\Text File")

    ' Set up references for the text document, Find object, and
    ' TextSelection object.
    doc = dte.ActiveDocument
    textDoc = CType(doc.Object("TextDocument"), TextDocument)
    textSel = textDoc.Selection
    findWin = CType(dte.Find, Find2)
    ' Make sure all docs are searched before displaying results.
    findWin.WaitForFindToComplete = True

    ' Insert ten lines of text.
    For iCtr = 1 To 10
        textDoc.Selection.Text = "This is a test" & vbCr
    Next iCtr
    textDoc.Selection.Text = "This is a different word"

    ' Uses FindReplace to find all occurrences of the word, test, in 
    ' the document.
    MsgBox("Now changing all occurrences of 'test' to 'replacement'.")
    findWin.FindReplace(vsFindAction.vsFindActionReplaceAll, "test", _
      vsFindOptions.vsFindOptionsMatchCase, "replacement", _
      vsFindTarget.vsFindTargetCurrentDocument, , , _
      vsFindResultsLocation.vsFindResultsNone)

    ' Uses Find2.Execute to find the word, different, in the document.
    ' findWin.FindWhat = "different"
    ' findWin.MatchCase = True
    ' findWin.Execute()

    ' Uses Find2.Execute to replace all occurrences of the word, Test, 
    ' with the word, replacement.
    ' findWin.FindWhat = "test"
    ' findWin.ReplaceWith = "replacement"
    ' findWin.Action = vsFindAction.vsFindActionReplaceAll
    ' findWin.Execute()
End Sub
public void OnConnection(object application, ext_ConnectMode 
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    searchReplace(_applicationObject);
}

public void searchReplace(DTE2 dte)
{
    Find2 findWin;
    Document doc;
    TextDocument textDoc;
    TextSelection textSel;
    int iCtr;

    // Create a new text file.
    dte.ItemOperations.NewFile("General\\Text File"
      ,"New file",Constants.vsViewKindTextView);

    // Set up references for the text document, Find object, and
    // TextSelection object.
    doc = dte.ActiveDocument;
    textDoc = (TextDocument) doc.Object("TextDocument");
    textSel = textDoc.Selection;
    findWin = (Find2) dte.Find;
    // Make sure all docs are searched before displaying results.
    findWin.WaitForFindToComplete = true;

    // Insert ten lines of text.
    for(iCtr=1; iCtr<=10; iCtr++)
    {
        textDoc.Selection.Text = "This is a test"+Environment.NewLine;
    }
    textDoc.Selection.Text = "This is a different word";

    // Uses FindReplace to find all occurrences of the word, test, in 
    // the document.
   System.Windows.Forms.MessageBox.Show(
     "Now changing all occurrences of 'test' to 'replacement'.");
   findWin.FindReplace(vsFindAction.vsFindActionReplaceAll, "test", 
     (int) vsFindOptions.vsFindOptionsFromStart, "replacement", 
     vsFindTarget.vsFindTargetCurrentDocument, "", 
     "",vsFindResultsLocation.vsFindResultsNone);

   // Uses Find2.Execute to find the word, different, in the document.
   // findWin.FindWhat = "different"
   // findWin.MatchCase = True
   // findWin.Execute()

   // Uses Find2.Execute to replace all occurrences of the word, Test, 
   // with the word, replacement.
   // findWin.FindWhat = "test"
   // findWin.ReplaceWith = "replacement"
   // findWin.Action = vsFindAction.vsFindActionReplaceAll
   // findWin.Execute()
}

Siehe auch

Aufgaben

Gewusst wie: Kompilieren und Ausführen der Codebeispiele für das Automatisierungsobjektmodell

Gewusst wie: Steuern des Code-Editors (Visual Basic)

Gewusst wie: Erstellen von Add-Ins

Exemplarische Vorgehensweise: Erstellen eines Assistenten

Konzepte

Diagramm "Automationsobjektmodell"

Weitere Ressourcen

Erstellen und Steuern von Umgebungsfenstern

Erstellen von Add-Ins und Assistenten

Referenz zur Automatisierung und Erweiterbarkeit