Sublime Text: How to jump to file from Find Results using keyboard?

后端 未结 6 1836
北恋
北恋 2020-12-23 10:50

If you File > Find in Files... ++F you\'re brought to the Find Results, listing the files and highl

相关标签:
6条回答
  • 2020-12-23 11:19

    on SublimeText 3 I had to use F4(for going to the current result file) and Shift +F4 (for previous result).

    From the default keymap...

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

    I hope this post helps.

    SP

    0 讨论(0)
  • 2020-12-23 11:27

    It is possible to emulate a double click in Sublime Text by executing the drag_select command with an argument of "by": "words" (as seen in the Default sublime-mousemap file).

    However, you need to pretend that the mouse is where the caret is for this work. The following plugin will do this:

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

    To be used in combination with a keybinding like:

    { "keys": ["alt+/"], "command": "double_click_at_caret" },
    
    0 讨论(0)
  • 2020-12-23 11:38

    Try Shift+F4 (fn+Shift+F4 on the Aluminum Keyboard).

    0 讨论(0)
  • 2020-12-23 11:39

    try Ctrl+P - this quick-opens files by name in your project, For a full list of keyboard shortcuts see here

    0 讨论(0)
  • 2020-12-23 11:42

    It appears a plugin has been created to do this. Took a quick look, there are some additional features in the plugin. While my original answer below will work, it will be much easier to install an existing plugin.

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


    Doable with a 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
    

    Set up a key binding with the command find_in_files_goto. Be careful when doing this though. Ideally, there would be some setting that identifies this view as the "Find In Files" view, so you could use that as a context. But I'm not aware of one. Of course, if you do find one, let me know.

    Edit Pulling up the example key binding into the main body of the answer.

    {
        "keys": ["enter"],
        "command": "find_in_files_goto",
        "context": [{
            "key": "selector",
            "operator": "equal",
            "operand": "text.find-in-files"
        }]
    }
    
    0 讨论(0)
  • 2020-12-23 11:43

    the command 'next_result' will do this. using the neat idea muhqu posted about using scope, you can make it so that you can press 'enter' on the line that you want to goto:

    ,{ "keys": ["enter"], "command": "next_result", "context": [{"key": "selector", 
    "operator": "equal", "operand": "text.find-in-files" }]}
    
    0 讨论(0)
提交回复
热议问题