Partager via


Comment : automatiser la recherche et le remplacement de texte

Les add-ins Visual Studio sont déconseillées dans Visual Studio 2013. Vous devriez mettre vos macros complémentaires à niveau vers des extensions VSPackage. Pour plus d'informations sur les mises à jour, consultez FAQ : conversion de compléments en extensions VSPackage.

Visual Studio vous permet de rechercher et de remplacer du texte présent dans des documents ouverts dans l'environnement de développement intégré (IDE) et enregistrés dans des fichiers sur le système. Le principal moyen d'y parvenir consiste à utiliser les méthodes FindReplace et Execute de l'objet Find. Les objets TextSelection et EditPoint fournissent également la méthode FindPattern. Pour plus d'informations, consultez la méthode FindPattern dans Comment : contrôler l'éditeur de code (Visual Basic).

Notes

La valeur de constante vsFindOptionsMatchInHiddenTex[t] dans l'énumération [vsFindOptions] ne s'applique pas à la méthode FindPattern car elle applique sa recherche à l'intégralité du texte, y compris au texte masqué.

La version de Find dans l'espace de noms EnvDTE80 est nommée Find2. Elle est identique à l'objet Find, mais offre une nouvelle propriété nommée WaitForFindToComplete. Lorsque cette propriété booléenne a la valeur True, l'opération de recherche ne s'arrête pas tant que tous les documents sélectionnés n'ont pas été parcourus.

Par exemple, si vous recherchez un mot dans 100 documents, vous pouvez recevoir des résultats incomplets à moins d'utiliser la propriété WaitForFindToComplete ou de gérer l'événement FindDone. Si les deux méthodes fonctionnent, la définition de la propriété WaitForFindToComplete n'en reste pas moins une méthode plus rapide et plus facile de garantir que tous les documents ont été examinés avant d'afficher les résultats de la recherche.

Notes

Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée.Ces procédures ont été développées avec les paramètres de développement généraux actifs.Pour modifier vos paramètres, sélectionnez Importation et exportationde paramètres dans le menu Outils.Pour plus d'informations, consultez Paramètres Visual Studio.

Exemple

Les exemples suivants montrent comment référencer et utiliser les différents membres du modèle Automation Find. Cet exemple crée un document texte qui contient du texte, puis recherche et remplace du texte à l'aide de différentes méthodes. Pour exécuter cet exemple, remplacez la méthode OnConnection dans un complément simple par le code ci-dessous. Pour exécuter différentes sections de cet exemple, supprimez les marques de commentaire du code approprié. Avant d'exécuter ce code, assurez-vous que la propriété « Embed Interop Types » de la référence d'assembly EnvDTE a la valeur False.

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()
}

Voir aussi

Tâches

Comment : compiler et exécuter les exemples de code du modèle objet Automation

Comment : contrôler l'éditeur de code (Visual Basic)

Comment : créer un complément

Procédure pas à pas : création d'un Assistant

Concepts

Graphique Modèle d'objet Automation

Autres ressources

Création et contrôle de fenêtres d'environnement

Création de compléments et d'Assistants

Guide de référence de l'extensibilité et de l'automation