Вопрос или проблема
Я ищу быстрый способ выполнить сложный поиск текста в VSCode.
Некоторые примеры:
- Несколько ключевых слов (файл содержит как
apple
, так иorange
где угодно в текстовом файле) - Отрицательные ключевые слова (файл содержит
apple
, но не содержитcherry
в текстовом документе)
VSCode отлично справляется с предоставлением быстрых результатов, но позволяет использовать только одно ключевое слово. Регулярные выражения не решают проблему, потому что ключевые слова могут быть в любом порядке.
На мейнфрейме это делается так: когда вы выполняете поиск (глобальный поиск), он представляет собой список файлов, которые соответствуют вашему результату по ключевому слову. Вы затем можете выполнить еще один поиск, иском только среди файлов из результатов вашего предыдущего поиска. Используя эту технику, вы можете накладывать многократный поиск по ключевым словам друг на друга.
Agent Ransack https://www.mythicsoft.com/agentransack/ сделает это.
Есть бесплатная версия и платная версия – я думаю, бесплатная версия сделает то, что вам нужно.
Вам придется научиться использовать регулярные выражения (поиск в Google).
Вы можете сделать это с помощью терминала PowerShell Visual Studio Code. Откройте терминал с помощью Ctrl + Shift + `.
Оба apple
и orange
(развернуто):
get-childitem -recurse | where-object {$_ | select-string 'apple'} | where-object {$_ | select-string 'orange'} | select fullname
Или просто (сжато):
ls -r | ?{$_ | sls 'apple'} | ?{$_ | sls 'orange'} | select fullname
apple
, но не cherry
(сжато):
ls -r | ?{$_ | sls 'apple'} | ?{-not($_ | sls 'cherry')} | select fullname
Результаты должны выглядеть примерно так. Вы можете Ctrl + Левая кнопка мыши C:\temp\apple.txt
чтобы открыть файл
FullName
--------
C:\Temp\apple.txt
Это обычно достигается только с помощью regex. Например, с grepWin или любым инструментом, поддерживающим современные движки регулярных выражений, вы можете использовать:
\A(?!.*\bcherry\b).*\bapple\b
Что, по сути, начинает соответствовать с начала всей строки (\A
) и затем гарантирует, что нет слова cherry
до конца строки с помощью отрицательного предсказания, затем оно соответствует apple
как требованию. Посмотрите этот ответ для полного объяснения.
К сожалению, Visual Studio Code в настоящее время выдает ошибку при использовании этого regex в поиске Ctrl + Shift + F из-за \A
. Я сообщил об этом как о проблеме здесь.
Единственной альтернативой в самом VSCode без помощи оболочек, похоже, является использование расширения Reverse Search, но, судя по тому, что я вижу, оно поддерживает только поиск без совпадений, нет возможности сочетать его с обычным поиском.
Ответ или решение
Чтобы эффективно выполнять сложные текстовые поиски в Visual Studio Code (VSCode), можно использовать несколько стратегий, как встроенных, так и дополнительных инструментов. Рассмотрим, как искать файлы, которые содержат одно слово, но не содержат другое, а также искать файлы с несколькими ключевыми словами.
1. Поиск с использованием терминала PowerShell
Если вы справляетесь с типичными задачами поиска по ключевым словам, можно воспользоваться встроенным терминалом PowerShell в VSCode. Для этого откройте терминал, нажав сочетание клавиш Ctrl
+ Shift
+ `
(гравис).
Вот примеры команд для поиска:
Поиск файлов, содержащих оба ключевых слова (например, apple
и orange
):
Get-ChildItem -Recurse | Where-Object { $_ | Select-String 'apple' } | Where-Object { $_ | Select-String 'orange' } | Select-Object FullName
Поиск файлов, содержащих одно слово (apple
), но не содержащих другое (cherry
):
Get-ChildItem -Recurse | Where-Object { $_ | Select-String 'apple' } | Where-Object { -not ($_ | Select-String 'cherry') } | Select-Object FullName
Результаты будут отображены с указанием полных путей к файлам, которые соответствуют заданным критериям поиска.
2. Использование регулярных выражений
Вы можете также попробовать использовать регулярные выражения для более сложных поисков. Например, можно использовать такую конструкцию для поиска, которая одновременно ищет apple
, но исключает cherry
:
^(?!.*\bcherry\b).*apple.*
Однако, важно отметить, что на данный момент VSCode не позволяет использовать данный формат регулярных выражений (с ^
) в своем глобальном поиске, возвращая ошибку. Это связано с особенностями обработки регулярных выражений в VSCode, о чем упомянуто в отчете об ошибке.
3. Расширения для VSCode
Одним из возможных решений станет использование расширений, например, Reverse Search. Это расширение позволяет осуществлять поиск по вашему коду и находит строки, которые не соответствуют вашим критериям. Однако обратите внимание, что на данный момент это расширение поддерживает только поиски без совпадений, что означает, что вам придется комбинировать его с другими методами.
4. Использование третьих сторонних утилит
В случае, если возможности VSCode не удовлетворяют ваши потребности, можно рассмотреть возможность использования сторонних приложений, таких как Agent Ransack. Это мощный инструмент для поиска, который поддерживает сложные критерии поиска, включая позитивные и негативные ключевые слова.
Заключение
VSCode предоставляет мощные инструменты для работы с кодом, однако его функциональные возможности в отношении сложного текстового поиска могли бы быть улучшены. Используя комбинацию PowerShell, регулярных выражений и расширений, можно достичь желаемого результата. Если ваши требования превышают возможности редактора, сторонние утилиты окажутся очень полезными в таких случаях. Всегда важно экспериментировать с различными подходами для нахождения наилучшего решения для ваших задач.