По умолчанию вы можете перемещаться между всеми результатами операции поиска, используя пункты меню в 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 },
],
},