Поиск и замена по файлам в Visual Studio

91

Команды Find in Files и Replace in Files расширяют область поиска за пределы текущего решения на целые каталоги и структуры папок и даже позволяют выполнять массовые замены любых совпадений, соответствующих заданным критериям и фильтрам. Кроме того, пользователю доступны дополнительные флажки, позволяющие размещать результаты поиска в одном или двух инструментальных окнах, чтобы по ним было легко перемещаться.

Это средство поиска лучше всего работает, когда требуется найти простой текст в файле, который не обязательно является частью вашего решения.

Команда Find in Files

Команда Find in Files действительно является мощным инструментом поисковой машины, встроенной в систему Visual Studio. Она не ограничивает поиск файлами, входящими в текущее решение, а дает возможность выполнять поиск по заданному критерию, просматривая целые каталоги (включая их подкаталоги).

Диалоговое окно Find in Files, показанное на рисунке ниже, можно открыть, выбрав команду Edit --> Find and Replaced --> Find in Files. В качестве альтернативы, если вы уже открыли диалоговое окно Quick Find (<Ctrl+F>), можно переключиться в режим Find in Files, щелкнув на небольшом треугольнике, расположенном сразу справа от текстового поля поиска, и выбрав в открывшемся меню команду Find in Files. Для того чтобы открыть это диалоговое окно, можно также использовать комбинацию клавиш <Ctrl+Shift+F>.

Модальное окно Find in Files

Большинство флажков в окне Quick Find при этом останутся доступными, включая шаблонные символы и регулярные выражения, но вместо поиска в проекте или решении пользователь теперь может самостоятельно указывать в поле Look In другую область поиска. Пользователь может либо задать область поиска, набрав соответствующий текст, либо щелкнуть на троеточии и открыть диалоговое окно Choose Search Folders, показанное на рисунке ниже:

Выбор области поиска с помощью модального окна Choose Search Folders

Пользователь имеет возможность перемещаться по всей файловой системе, включая сетевые диски, и добавлять каталоги, которые должны входить в область поиска. Это позволяет добавлять огромные иерархии файлов в один поисковый запрос. Для того чтобы указать каталоги, которые следует просмотреть, можно использовать список Available Folders, расположенный слева от списка Selected Folders. Чтобы добавить выбранные каталоги в список Selected Folders, достаточно щелкнуть на стрелке, направленной вправо.

В этом списке порядок поиска можно уточнять с помощью стрелок, направленных вверх и вниз. Добавив каталог в список Selected Folders, щелкните на кнопке OK, чтобы в поле Look In отобразился список путей, разделенных точкой с запятой. Для того чтобы сохранить этот список каталогов для будущего использования, введите имя в раскрывающийся список Folder Set и щелкните на кнопке Apply.

Процесс сохранения каталогов для поиска мало интуитивно понятен, но если интерпретировать кнопку Apply как некую усовершенствованную разновидность кнопки Save, то это диалоговое окно станет более-менее понятным.

Настройки поиска по файлам

Флажки в диалоговом окне Find in Files в разделе Find options аналогичны флажкам в диалоговом окне Quick Find. Поскольку поиск выполняется по файлам, которые не обязательно открыты в интегрированной среде разработки и могут даже не быть исходными файлами программ, флажок Search Up больше не используется. Кроме того, для того чтобы сузить поле поиска и задать тип просматриваемых файлов, предусмотрен дополнительный фильтр.

Раскрывающийся список Look at these file types содержит несколько наборов расширений, каждый из которых связан с определенным языком программирования. Это облегчает поиск в кодах, написанных на языках Visual Basic, C#, J# и др.

Пользователь может также задать свое собственное расширение, если он работает с каким-нибудь языком, который не поддерживается компанией Microsoft, или хочет использовать команду Find in Files для целей, не связанных с разработкой программы. Это позволяет ограничить область поиска лишь файлами, имеющими соответствующие расширения.

Кроме флажков, регламентирующих процесс поиска, в системе существуют средства настройки представления результатов поиска. Выполняя поиск, пользователь может выбрать одно из двух окон для вывода результатов. Полный список результатов поиска может быть довольно длинным, но если пользователя интересуют только имена файлов, в которых найдены совпадения, то он может установить флажок "Display file names only", и тогда в окне результатов каждому файлу будет соответствовать только одна строка.

Окна для вывода результатов

Результаты выполнения команды Find in Files отображаются в одном из двух окон. Они открываются как инструментальные окна, прикрепленные к нижнему краю рабочего пространства интегрированной среды разработки. Для каждой строки, содержащей критерий поиска, окно результатов содержит полную строку информации, содержащую имя файла и путь к нему, а также номер строки, содержащей совпадение и саму строку текста, так что пользователь сразу видит контекст:

Результат поиска по файлам в Visual Studio

На верхней кромке каждого окна результатов расположена инструментальная панель (слева), обеспечивающая навигацию по самим результатам. Эти команды можно также выбрать в контекстном меню:

Контекстное меню для окна Find in Files

Достаточно дважды щелкнуть на конкретном совпадении, чтобы перейти на соответствующую строку кода.

Команда Replace in Files

Несмотря на очевидную полезность команды, которая выполняет поиск в большом количестве файлов и обнаруживает множество совпадений, соответствующих заданному критерию, команда Replace in Files еще полезнее. Для того чтобы выбрать эту команду, можно нажать комбинацию клавиш <Ctrl+Shift+H> или щелкнуть на треугольнике, расположенном рядом с заголовком окна Quick Replace. Команда Replace in Files делает то же самое, что и команда Find in Files, и имеет точно такие же возможности.

Ее основное отличие заключается в том, что она выполняет не только поиск, но и замену текста в файлах. При массовых заменах эта команда запрашивает подтверждение, что часто оказывается очень удобно. Для того чтобы сохранить возможность исправить ошибку после замены, следует установить флажок Keep Modified Files Open After Replace All.

Обратите внимание на то, что эти возможности доступны, только если выполняется команда Replace All. При выполнении команды Replace система Visual Studio откроет файл, содержащий следующее совпадение, и оставит его открытым в любом случае.

Важно помнить: если не установить флажок Keep Modified Files Open After Replace All и выполнить массовую замену в большом количестве файлов, то они мгновенно изменятся и сделать откат будет невозможно. Думайте, что делаете!

Независимо от того, установлен флажок Keep Modified Files Open After Replace All или нет, после выполнения команды Replace All система Visual Studio сообщит, сколько изменений было внесено. Если вы не хотите видеть это сообщение, закройте это диалоговое окно, чтобы оно не открывалось при выводе результатов следующего поиска.

Команда Incremental Search

Для того чтобы найти что-то в текущем окне кода, не открывая диалогового окна, можно использовать команду Incremental Search, которая выполняется в ответ на выбор команды Edit --> Advanced --> Incremental Search или нажатие комбинации клавиш <Ctrl+I>. Эта команда находит следующее совпадение на основе поискового запроса. Для того чтобы поиск выполнялся вверх по документу, а не вниз, следует нажать комбинацию клавиш <Ctrl+Shift+I>.

Сразу после открытия окна Incremental Search пользователь может начинать ввод искомого текста. Указатель мыши превратится в значок с изображением бинокля и стрелки, направленной вниз. По мере ввода каждого символа редактор будет переходить к следующему совпадению по отношению к введенному тексту. Например, после ввода буквы "f" отобразится первое слово, содержащее эту букву, например offer. Если пользователь наберет букву "o", то курсор переместится на первое слово, содержащее сочетание букв "fo", например form и т.д.

Если весь искомый текст вводится строчными буквами, то совпадение не будет зависеть от регистра. Однако если поисковый запрос содержит хотя бы одну прописную букву, то поиск становится чувствительным к регистру.

Этот инструмент поиска наиболее эффективен в тех же ситуациях, что и команда Quick Find, но поиск на этот раз проводится только в текущем файле и не имеет дополнительных возможностей. Если не учитывать дополнительные возможности команды Quick Find, то эти команды полностью совпадают. Но если пользователь хочет найти результат, внести изменение, а затем найти следующий результат, то лучше использовать команду Quick Find, поскольку иначе, найдя следующий результат, он должен будет заново ввести поисковый запрос для команды Incremental Search.

Пройди тесты
Лучший чат для C# программистов