Sublime Text:如何使用键盘从查找结果中跳转到文件?

时间:2013-05-27 06:48:20

标签: find sublimetext2 sublimetext sublimetext3

如果您File> Find in Files... + + F 您被带到Find Results,列出了文件和突出显示的匹配项。您可以双击文件名/路径或匹配的行来打开右侧的文件。

我想知道是否有办法完全通过键盘进行双击?

凭借Sublimes出色的文件切换功能,我认为在执行Find in Files...时必须有一种方法可以将手放在键盘上。

6 个答案:

答案 0 :(得分:56)

尝试 Shift + F4 fn + Shift + F4 铝键盘)。

答案 1 :(得分:27)

似乎已经创建了一个插件来执行此操作。快速浏览一下,插件中还有一些其他功能。虽然我的原始答案可行,但安装现有插件会容易得多。

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设置密钥绑定。这样做时要小心。理想情况下,会有一些设置将此视图标识为"在文件中查找"查看,因此您可以将其用作上下文。但我不知道一个。当然,如果你找到了,请告诉我。

修改 将示例键绑定到答案的主体中。

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

答案 2 :(得分:18)

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

答案 3 :(得分:9)

命令'next_result'将执行此操作。使用关于使用范围的简洁想法muhqu,您可以使它在您想要转到的行上按“输入”:

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

答案 4 :(得分:5)

尝试 Ctrl + P - 这会在项目中按名称快速打开文件,有关键盘快捷键的完整列表,请参阅here

答案 5 :(得分:0)

可以通过执行带有drag_select参数的"by": "words"命令来模拟Sublime Text中的双击(如默认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" },