Подтвердить что ты не робот

Sublime Text: Как перейти к файлу из Find Results с помощью клавиатуры?

Если вы File > Find in Files... + + F, вы попадаете в Find Results, перечисляя файлы и подсвеченные совпадения. Вы можете дважды щелкнуть либо имя файла/путь, либо соответствующую строку, чтобы открыть файл в правой строке.

Интересно, есть ли способ сделать то, что делает двойной щелчок по клавиатуре?

Благодаря превосходным возможностям переключения файлов Sublimes, я думал, что при использовании Find in Files... должен быть способ держать руки на клавиатуре.

4b9b3361

Ответ 1

Кажется, для этого был создан плагин. Взяв быстрый взгляд, в плагине есть некоторые дополнительные функции. Хотя мой первоначальный ответ ниже будет работать, будет намного проще установить существующий плагин.

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


Разрешить с помощью плагина.

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

Настройте привязку клавиш с помощью команды find_in_files_goto. Будьте осторожны при этом. В идеале, будет некоторая настройка, которая идентифицирует это представление как представление "Найти файлы", поэтому вы можете использовать это как контекст. Но я не знаю об этом. Конечно, если вы найдете его, сообщите мне.

Edit Вытягивание примера связывания ключа в основную часть ответа.

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

Ответ 2

Попробуйте Shift + F4 (fn + Shift + F4 на алюминиевой клавиатуре).

Ответ 3

on SublimeText 3 Мне пришлось использовать F4 (для перехода к текущему файлу результата) и Shift +F4 (для предыдущего результата).

Из основной раскладки по умолчанию...

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

Надеюсь, этот пост поможет.

SP

Ответ 4

команда 'next_result' сделает это. используя опрятную идею muhqu, посвященную использованию области видимости, вы можете сделать ее так, чтобы вы могли нажать 'enter' в строке, которую хотите перейти:

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

Ответ 5

попробуйте Ctrl + P - это быстрое открытие файлов по имени в вашем проекте. Полный список сочетаний клавиш см. здесь

Ответ 6

Можно эмулировать двойной щелчок в Sublime Text, выполнив команду drag_select с аргументом "by": "words" (как показано в файле Default sublime-mousemap).

Однако вам нужно притвориться, что мышь - это место, где находится каретка для этой работы. Следующий плагин сделает это:

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) })

Используется в сочетании с привязкой клавиш:

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