web-dev-qa-db-fra.com

Texte sublime: comment passer au fichier à partir des résultats de la recherche à l'aide du clavier?

Si vous File> Find in Files... ++F vous êtes amené au Find Results, répertoriant les fichiers et les correspondances en surbrillance. Vous pouvez double-cliquer sur le nom/chemin du fichier ou sur la ligne correspondante pour ouvrir le fichier sur la ligne de droite.

Je me demande s'il existe un moyen de faire exactement ce que fait le double-clic via le clavier?

Avec les excellentes capacités de commutation de fichiers de Sublimes, je pensais qu'il devait y avoir un moyen de garder les mains sur le clavier lorsque vous faites Find in Files....

50
muhqu

Il semble qu'un plugin ait été créé pour ce faire. Jetez un coup d'œil, il y a quelques fonctionnalités supplémentaires dans le plugin. Bien que ma réponse d'origine ci-dessous fonctionne, il sera beaucoup plus facile d'installer un plugin existant.

https://sublime.wbond.net/packages/BetterFindBuffer


Faisable avec un plugin.

import sublime
import sublime_plugin
import re
import os
class FindInFilesGotoCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        view = self.view
        if view.name() == "Find Results":
            line_no = self.get_line_no()
            file_name = self.get_file()
            if line_no is not None and file_name is not None:
                file_loc = "%s:%s" % (file_name, line_no)
                view.window().open_file(file_loc, sublime.ENCODED_POSITION)
            Elif file_name is not None:
                view.window().open_file(file_name)

    def get_line_no(self):
        view = self.view
        if len(view.sel()) == 1:
            line_text = view.substr(view.line(view.sel()[0]))
            match = re.match(r"\s*(\d+).+", line_text)
            if match:
                return match.group(1)
        return None

    def get_file(self):
        view = self.view
        if len(view.sel()) == 1:
            line = view.line(view.sel()[0])
            while line.begin() > 0:
                line_text = view.substr(line)
                match = re.match(r"(.+):$", line_text)
                if match:
                    if os.path.exists(match.group(1)):
                        return match.group(1)
                line = view.line(line.begin() - 1)
        return None

Configurez une liaison de touches avec la commande find_in_files_goto. Soyez prudent lorsque vous faites cela. Idéalement, il y aurait un paramètre qui identifie cette vue comme la vue "Rechercher dans les fichiers", vous pouvez donc l'utiliser comme contexte. Mais je n'en connais pas. Bien sûr, si vous en trouvez un, faites-le moi savoir.

Modifier Tirez vers le haut l'exemple de liaison de touches dans le corps principal de la réponse.

{
    "keys": ["enter"],
    "command": "find_in_files_goto",
    "context": [{
        "key": "selector",
        "operator": "equal",
        "operand": "text.find-in-files"
    }]
}
27
skuroda

Essayer Shift+F4 (fn+Shift+F4 sur le clavier en aluminium).

57
Christian Lescuyer

sur SublimeText 3 J'ai dû utiliser F4 (pour accéder au fichier de résultats actuel) et Shift +F4 (pour le résultat précédent).

Depuis le clavier par défaut ...

{ "keys": ["super+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"} },
{ "keys": ["f4"], "command": "next_result" },
{ "keys": ["shift+f4"], "command": "prev_result" },

J'espère que ce message vous aidera.

SP

18
Som Poddar

la commande 'next_result' fera cela. en utilisant l'idée soignée que muhqu a publiée à propos de l'utilisation de scope, vous pouvez faire en sorte que vous puissiez appuyer sur 'enter' sur la ligne que vous souhaitez obtenir:

,{ "keys": ["enter"], "command": "next_result", "context": [{"key": "selector", 
"operator": "equal", "operand": "text.find-in-files" }]}
9
robarson

essayez Ctrl + P - ces fichiers à ouverture rapide par nom dans votre projet, Pour une liste complète des raccourcis clavier, voir ici

6
user2424133

Il est possible d'émuler un double clic dans Sublime Text en exécutant le drag_select commande avec un argument de "by": "words" (comme vu dans le Default sublime-mousemap fichier).

Cependant, vous devez prétendre que la souris est l'endroit où se trouve le curseur pour ce travail. Le plugin suivant le fera:

import sublime
import sublime_plugin


class DoubleClickAtCaretCommand(sublime_plugin.TextCommand):
    def run(self, edit, **kwargs):
        view = self.view
        window_offset = view.window_to_layout((0,0))
        vectors = []
        for sel in view.sel():
            vector = view.text_to_layout(sel.begin())
            vectors.append((vector[0] - window_offset[0], vector[1] - window_offset[1]))
        for idx, vector in enumerate(vectors):
            view.run_command('drag_select', { 'event': { 'button': 1, 'count': 2, 'x': vector[0], 'y': vector[1] }, 'by': 'words', 'additive': idx > 0 or kwargs.get('additive', False) })

A utiliser en combinaison avec un raccourci clavier comme:

{ "keys": ["alt+/"], "command": "double_click_at_caret" },
0
Keith Hall