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 exportarconfiguraciones del menú Herramientas.Para obtener más información, vea Valores de configuración de Visual Studio.
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)
Conceptos
Gráfico del modelo de objetos de automatización
Otros recursos
Crear y controlar las ventanas del entorno