Como encontrar um arquivo aberto pelo nome em todas as janelas do Sublime Text

0

Respostas como link e Pesquisar em todas as guias abertas com o Sublime Text 2 diga como procurar arquivos abertos usando + + F e Where: <open files> .

Mas quando eu tento isso, ele procura apenas arquivos abertos nas guias na janela atual . Se eu tiver duas janelas abertas com 10 abas cada, e eu usar + + F em uma das janelas, os resultados da pesquisa informam me que pesquisou 10 arquivos, não 20.

Agora, se eu tiver uma dúzia de janelas abertas, não quero ter que percorrer cada uma delas procurando o arquivo desejado. (Sim, eu devo limpar minha bagunça, mas essa não é a pergunta que estou fazendo.)

Existe uma maneira de encontrar um arquivo aberto em qualquer janela aberta ?

Também gostaria de encontrar o arquivo por nome (ou o título da guia, que geralmente é o mesmo) e não por conteúdo. Mas eu me contentaria em pesquisar por conteúdo se pudesse pesquisar em todas as janelas abertas.

    
por LarsH 30.05.2018 / 14:47

1 resposta

1

Você poderia resolver isso com um pacote pequeno. Aqui está minha tentativa: crie uma pasta chamada " winfinder " ao unter a pasta do pacote Sublime 3 (no Mac, isso seria ~/Library/Application Support/Sublime Text 3/Packages/winfinder ).

Em seguida, crie um arquivo main.py nessa pasta com este conteúdo:

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)

Agora precisamos de uma maneira de invocar a funcionalidade. Isso é feito criando um arquivo chamado main.sublime-commands na mesma pasta. O conteúdo é o seguinte:

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

Uso

Se você abrir a paleta de comandos e digitar " WindowFind ", deverá ver o comando. Pressione [ENTER] e o pacote solicitará que uma string de pesquisa seja pesquisada em todas as guias de todas as janelas. Se não houver correspondência, uma mensagem será exibida.

Se houver uma correspondência, um novo nome de guia "SearchResults" será aberto com os resultados da pesquisa:

3 matches:

/Users/your_user/notes/daylog.txt

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

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

(string de busca era "ay") - apenas teste no Sublime 3, funciona. Obrigado pela ideia, isso é útil! : -)

    
por 04.06.2018 / 16:43