Compartilhar via


Como automatizar a pesquisa e a substituição de texto

Os suplementos do Visual Studio foram substituídos no Visual Studio 2013. Você deve atualizar seus suplementos para as extensões VSPackage. Para obter mais informações sobre atualização, consulte Perguntas frequentes: convertendo suplementos em extensões VSPackage.

Visual Studio oferece a você a capacidade de pesquisar e substituir texto em documentos que estão abertos no ambiente de desenvolvimento integrado (IDE) e contido em arquivos no sistema. A principal maneira de fazer isso é usando os métodos FindReplace e Execute do objeto Find. Os objetos TextSelection e EditPoint também oferecem o método FindPattern. Para obter mais informações, consulte o método FindPattern em Como controlar o editor de código (Visual Basic).

Dica

O valor da constante vsFindOptionsMatchInHiddenTex[t] na enumeração [vsFindOptions] não se aplica ao método FindPattern porque ele pesquisa todo o texto, inclusive o texto oculto.

A versão de Find no namespace EnvDTE80 é chamada de Find2. É o mesmo que o objeto de Find, mas oferece uma nova propriedade chamada WaitForFindToComplete. Quando essa propriedade booliana é definida como True, a operação de localização não é concluído até que todos os documentos selecionados sejam pesquisados.

Se, por exemplo, você fosse procurar por uma palavra em 100 documentos, você poderia receber resultados incompletos a menos que você usasse a propriedade de WaitForFindToComplete ou tratasse o evento de FindDone. Ambos os métodos funcionam, mas definir a propriedade de WaitForFindToComplete é a maneira mais fácil e curta de garantir que todos os documentos sejam pesquisados antes de exibir os resultados da pesquisa.

Dica

As caixas de diálogo e os comandos de menu que você vê podem diferir das descritas no Help dependendo de suas configurações ativas ou de edição.Esses procedimentos foram desenvolvidos com as Configurações Gerais de Desenvolvimento ativas.Para alterar as configurações, escolha Importar e ExportarConfigurações no menu de Ferramentas.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.

Exemplo

Os exemplos a seguir demonstram como referenciar e usar os vários membros do modelo de automação de localização. Esse exemplo cria um documento de texto com algum texto e, em seguida, procura e substitui o texto usando métodos diferentes. Para executar este exemplo, substitua o método OnConnection em um suplemento simples com o código abaixo. Para executar diferentes seções deste exemplo, remova os comentários do código apropriado. Antes de executar esse código, verifique se a propriedade "Inserir Tipos Interop" da referência do assembly de EnvDTE está como Falso.

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

Consulte também

Tarefas

Como compilar e executar os exemplos de código do modelo de objeto Automation

Como controlar o editor de código (Visual Basic)

Como criar um suplemento

Instruções passo a passo: criando um assistente

Conceitos

Gráfico do modelo de objetos automation

Outros recursos

Criando e controlando janelas de ambiente

Criando suplementos e assistentes

Referência sobre automação e extensibilidade