Поделиться через


Практическое руководство. Автоматизация поиска и замены текста

Надстройки Visual Studio выступан сопоставления в Visual Studio 2013. Необходимо обновить для надстройки с расширениями VSPackage. Дополнительные сведения об обновлении см. в разделе Часто задаваемые вопросы. Преобразование надстроек в расширения VSPackage.

Visual Studio предоставляет возможность поиска и замены текста в документах, открытых в интегрированной среде разработки, и в файлах системы. Основной способ для выполнения этих операций — использование методов FindReplace и Execute объекта Find. Объекты TextSelection и EditPoint также предлагают метод FindPattern. Дополнительные сведения см. в методе FindPattern в разделе Практическое руководство. Управление редактором кода (Visual Basic).

Примечание

Значение константы vsFindOptionsMatchInHiddenTex[t] в перечислении [vsFindOptions] не применимо для метода FindPattern, поскольку он осуществляет поиск по всему тексту, включая скрытый текст.

Версия Find в пространстве имен EnvDTE80 называется Find2. Этот объект аналогичен Find, но предлагает новое свойство с именем WaitForFindToComplete. Если этому логическому свойству присвоить значение True, то операция поиска будет продолжаться до тех пор, пока не будут проанализированы все документы.

Когда, например, требуется выполнить поиск в 100 документах, то результаты могут оказаться неполными, если не использовать свойство WaitForFindToComplete или не обработать событие FindDone. Работают оба метода, но установка свойства WaitForFindToComplete — более быстрый и простой способ, позволяющий добиться поиска по всем документам перед выводом результатов поиска.

Примечание

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или выпуска.Эти процедуры были разработаны с обычными параметрами разработки.Чтобы изменить настройки, в меню Сервис выберите команду Импорт и экспортпараметров.Для получения дополнительной информации см. Настройка параметров разработки в Visual Studio.

Пример

В следующих примерах показано, как использовать различные члены модели автоматизации поиска. В этом примере создается текстовый документ, содержащий некий текст, а затем осуществляется поиск и замена текста с использованием различных методов. Чтобы выполнить этот пример, замените метод OnConnection в простой надстройке следующим кодом. Чтобы выполнить различные разделы этого примера, следует убрать комментарии из соответствующих участков кода. До выполнения данного кода необходимо убедиться, что свойство сборки EnvDTE "Внедрить типы взаимодействия" ссылается на значение 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()
}

См. также

Задачи

Практическое руководство. Компиляция и выполнение примеров кода модели объектов автоматизации

Практическое руководство. Управление редактором кода (Visual Basic)

Практическое руководство. Создание надстройки

Пошаговое руководство. Создание мастера

Основные понятия

Диаграмма модели объектов автоматизации

Другие ресурсы

Создание окон среды и управление ими

Создание надстроек и мастеров

Справочник по автоматизации и возможностям расширения среды