Ответы, такие как https://stackoverflow.com/questions/20519040/search-in-all-files-in-a-project-in-sublime-text-3 и Поиск во всех открытых вкладках с помощью Sublime Text 2, рассказывают, как искать открытые файлы, используя ++F и Where: <open files> .

Но когда я пытаюсь это сделать, он только ищет файлы, открытые во вкладках в текущем окне. Если у меня открыто два окна с 10 вкладками в каждом, и я использую ++F в одном из окон, результаты поиска говорят мне, что он искал 10 файлов, а не 20.

Теперь, если у меня открыто дюжина окон, мне не нужно перебирать каждое из них в поисках нужного мне файла. (Да, я должен очистить свой беспорядок, но это не тот вопрос, который я задаю.)

Есть ли способ найти открытый файл в любом открытом окне?

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

1 ответ1

1

Вы можете решить это с помощью небольшого пакета. Вот моя попытка: создать папку с именем « winfinder » под папкой пакета Sublime 3 (на Mac это будет ~/Library/Application Support/Sublime Text 3/Packages/winfinder).

Затем создайте файл main.py в этой папке с этим содержимым:

import sublime
import sublime_plugin

class WinFindCommand(sublime_plugin.TextCommand):

    def search(self, search_string):
        l = []
        for w in sublime.windows():
            for sh in w.sheets():
                fn = sh.view().file_name()
                if fn is not None:
                    if search_string.lower() in fn:
                        l.append(fn + "\n")
        if len(l) > 0:
            v = sublime.active_window().new_file()
            v.set_name("SearchResults")
            v.run_command("insert",{"characters": str(len(l)) + " matches:\n\n"})
            v.run_command("insert",{"characters": "\n".join(l)})
        else:
            sublime.message_dialog("No match found.")


    def run(self, edit):
        w = sublime.active_window()
        w.show_input_panel("Search text", "", self.search, None, None)

Теперь нам нужен способ вызова функциональности. Это делается путем создания файла с именем main.sublime-commands в той же папке. Содержание выглядит следующим образом:

[
    { "caption": "WindowFind: find in window title", "command": "win_find" },
]

использование

Если вы откроете командную палитру и наберете « WindowFind », вы должны увидеть команду. Нажмите [ENTER], и пакет предложит вам найти строку поиска во всех вкладках всех окон. Если совпадений нет, отображается сообщение.

В случае совпадения откроется новая вкладка с именами "SearchResults" с результатами поиска:

3 matches:

/Users/your_user/notes/daylog.txt

/Users/your_user/Documents/2018/paychecks.csv

/Users/your_user/source/python/daily_tweets/daily.py

(строка поиска была "ay") - просто протестируйте ее на Sublime 3, работает. Спасибо за идею, это полезно! :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .