Прежде всего следует отметить, что вам не нужно искать точный путь; Везде, где Sublime предоставляет вам список элементов для выбора и текстовую запись, используется нечеткое сопоставление. В вашем примере поиск только для idx
сузит список до всех элементов, которые имеют эти символы в этом порядке, даже если они не находятся рядом друг с другом.
Записи показывают вам визуально, как они совпадают, и за кулисами существует довольно сложная система, которая решает, какие персонажи дают наилучшие совпадения (относительно некоторого скрытого алгоритма подсчета очков):
В дополнение к этому вы можете использовать несколько терминов, разделенных пробелами, для фильтрации списка. Каждый термин применяется к списку элементов, полученных из предыдущего термина, поэтому их не обязательно указывать в том же порядке, в котором они появляются в именах файлов.
Это помогает при поиске, когда вы обычно знаете имя файла, и оттуда можете дополнительно детализировать сегменты пути или другие термины, которые помогут сузить круг:
Здесь следует отметить, что, как видно на этих изображениях, структура папок my/long/directory/structure
, но имена файлов, как видно на панели, не включают my/
в начале.
В случаях, когда ваш проект содержит только одну папку верхнего уровня, эта папка не представлена в именах файлов. Предположительно, это связано с тем, что он является общим для каждого файла и, следовательно, не будет полезным фильтром. Таким образом, попытка использовать my
в поле поиска не вернет совпадений, если только один из файлов не имеет m
и y
где-то в своих именах файлов.
Это не тот случай, если имеется несколько папок верхнего уровня; в этом случае Sublime будет включать корневую папку в имена представленных файлов, потому что теперь требуется различать файлы в разных папках:
В дополнение к этому обратите внимание, что для любого заданного текста фильтра, который вы вводите на панели, Sublime запоминает полный текст элемента, который вы выбрали во время использования этого текста фильтра, и использует его в своей оценке для определения приоритетов совпадений в следующий раз. вы ищете в той же панели. В следующий раз, когда вы будете искать по тому же термину, Sublime автоматически предварительно выберет элемент, который вы выбрали в прошлый раз, исходя из теории, что вы, вероятно, захотите его снова.
Условия поиска и их совпадения сохраняются в файле сеанса и в файлах sublime-workspace
вашего проекта, поэтому, когда вы переходите от окна к окну и от проекта к проекту, вы, по сути, обучаете Sublime тому, как находить нужные файлы.
Мой совет: попробуйте немного изменить свое мышление. На мой взгляд, мощность алгоритма нечеткого сопоставления работает лучше всего, когда вы пытаетесь найти файлы более органичным способом, чем попытка полностью воспроизвести путь.
Вместо этого я бы сначала выделил несколько символов из имени файла, который я пытаюсь найти, а затем добавил бы еще один термин, который фильтрует некоторую часть пути, что еще больше устраняет неоднозначность; термин idx s1
в этом примере немедленно находит два файла index.js
, которые содержатся, например, в папках structure1
.
В более реальном примере имена папок могут содержать имена компонентов, частью которых они являются, или что-то еще, что обеспечивает логическую структуру кода, поэтому вы можете сделать idx con
, чтобы извлечь index.js
из controller
. папку или idx mod
, чтобы найти папку в папке model
и т.д.
Что касается лучшего/быстрого способа сделать это, я не думаю, что он есть, по крайней мере, в общем случае. Sublime по своей сути знает каждый файл в вашем проекте как часть индексации всех файлов для включения других функций, таких как Goto Symbol
, и использует наблюдателей за файлами для обнаружения изменений в структуре открытых папок.
Все остальное, включая сторонний плагин или пакет, должно было бы сначала выполнить избыточное сканирование файлов, чтобы собрать список файлов, а также должно было бы реплицировать файл, наблюдающий за тем, что Sublime уже делает, чтобы знать, когда что-то изменится.
21.06.2018