Sublime - Сочетание клавиш для первого выбора «Найти в файлах». - PullRequest
0 голосов
/ 06 сентября 2018

Когда я выполняю поиск в Sublime Text с помощью ключевого слова «Поиск в файлах», мне всегда приходится использовать мышь, чтобы щелкнуть по выделенному фрагменту в этом файле. Можно ли как-то использовать клавиатуру, чтобы вместо этого перейти к выделению? Или есть ли плагины, которые это делают?

enter image description here

1 Ответ

0 голосов
/ 07 сентября 2018

По умолчанию вы можете перемещаться между всеми результатами операции поиска, используя пункты меню в Find > Find Results или связанные с ними привязки клавиш (видимые в меню). При этом результаты идут по порядку вперед или назад, что может быть или не быть желательным, если результатов много.

Нет никаких навигационных клавиш для перемещения по находке в выходных файлах, кроме обычной файловой навигации, но вы можете добавить такую ​​с помощью плагина:

import sublime
import sublime_plugin

class JumpToFindMatchCommand(sublime_plugin.TextCommand):
    """
    In a find in files result, skip the cursor to the next or previous find
    match, based on the location of the first cursor in the view.
    """
    def run(self, edit, forward=True):
        # Find the location of all matches and specify the one to navigate to
        # if there aren't any in the location of travel.
        matches = self.view.find_by_selector("constant.numeric.line-number.match")
        fallback = matches[0] if forward else matches[-1]

        # Get the position of the first caret.
        cur = self.view.sel()[0].begin()

        # Navigate the found locations and focus the first one that comes
        # before or after the cursor location, if any.
        pick = lambda p: (cur < p.begin()) if forward else (cur > p.begin())
        for pos in matches if forward else reversed(matches):
            if pick(pos):
                return self.focus(pos)

        # not found; Focus the fallback location.
        self.focus(fallback)

    def focus(self, location):
            # Focus the found location in the window
            self.view.show(location, True)

            # Set the cursor to that location.
            self.view.sel().clear()
            self.view.sel().add(location.begin())

Это реализует новую команду jump_to_find_match, которая принимает необязательный аргумент forward, чтобы определить, должен ли переход быть вперед или назад, и сфокусирует вид на следующий или предыдущий результат поиска на основе расположения курсора первый курсор в файле, при необходимости оборачивая.

В сочетании с этим плагином для использования команды можно настроить привязки клавиш, например следующие. Здесь мы используем клавиши Tab и Shift + Tab ; context в каждом гарантирует, что привязка активна только во время поиска результатов.

{
    "keys": ["tab"],
    "command": "jump_to_find_match",
    "args": {
        "forward": true
    },
    "context": [
        { "key": "selector", "operator": "equal", "operand": "text.find-in-files", "match_all": true },
    ],
},

{
    "keys": ["shift+tab"],
    "command": "jump_to_find_match",
    "args": {
        "forward": false
    },
    "context": [
        { "key": "selector", "operator": "equal", "operand": "text.find-in-files", "match_all": true },
    ],
},

Это позволит вам перемещаться между совпадениями на панели поиска, но вам все равно придется использовать мышь для фактического перехода к местоположению совпадения в соответствующем файле.

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

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