Compartir a través de


Cómo: Automatizar la búsqueda y sustitución de texto

Con Visual Studio podrá buscar y reemplazar texto en documentos que se encuentren abiertos en el entorno de desarrollo integrado (IDE) y que, a su vez, estén contenidos en archivos del sistema. La principal forma para conseguirlo consiste en utilizar los métodos FindReplace y Execute del objeto Find. Los objetos TextSelection y EditPoint también proporcionan el método FindPattern. Para obtener más información, vea el método FindPattern en Cómo: Controlar el Editor de código (Visual Basic).

Nota

El valor constante vsFindOptionsMatchInHiddenTex[t] de la enumeración [vsFindOptions] no se aplica al método FindPattern, ya que busca en todo el texto, incluido el texto oculto.

La versión de Find en el espacio de nombres EnvDTE80 se denomina Find2. Es igual que el objeto Find, con la salvedad de que proporciona una nueva propiedad denominada WaitForFindToComplete. Cuando esta propiedad booleana se establece en True, la operación de búsqueda no concluye hasta que se hayan buscado todos los documentos seleccionados.

Por ejemplo, en caso de que sea necesario buscar una palabra en 100 documentos, es posible que los resultados que se obtengan estén incompletos, a menos que se haya utilizado la propiedad WaitForFindToComplete o se haya controlado el evento FindDone. Ambos métodos funcionan, pero establecer la propiedad WaitForFindToComplete es una forma más breve y sencilla a la hora de garantizar que se busque en todos los documentos antes de mostrar los resultados de la búsqueda.

Nota

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Estos procedimientos se han desarrollado con la Configuración de desarrollo general activa. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Trabajar con valores de configuración.

Ejemplo

Los siguientes ejemplos muestran cómo hacer referencia y utilizar los diversos miembros del modelo de automatización de Buscar. En este ejemplo se crea un documento de texto con algo de texto, a continuación, se busca y reemplaza texto utilizando diferentes métodos. Para ejecutar este ejemplo, reemplace el método OnConnection, que se encuentra en un complemento simple, por el código que aparece a continuación. Para ejecutar las diversas secciones de este ejemplo, quite los comentarios en los fragmentos de código apropiados. Antes de ejecutar este código, asegúrese de que la propiedad "Incrustar tipos de interoperabilidad" de la referencia del ensamblado EnvDTE esté establecida en 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()
}

Vea también

Tareas

Cómo: Compilar y ejecutar los ejemplos de código del modelo de objetos de automatización

Cómo: Controlar el Editor de código (Visual Basic)

Cómo: Crear un complemento

Tutorial: Crear un asistente

Conceptos

Gráfico del modelo de objetos de automatización

Otros recursos

Crear y controlar las ventanas del entorno

Crear complementos y asistentes

Referencia de automatización y extensibilidad