55

如果你File>Find in Files... ⇧</kbd>+⌘</kbd>+F you're brought to the Find Results, listing the files and highlighted matches. You can double-click either the filename/path or the matched line to open the file at the right line.

我想知道是否有办法通过键盘完成双击操作?

凭借 Sublimes 强大的文件切换功能,我认为必须有一种方法可以让您在执行Find in Files....

4

6 回答 6

62

试试Shift+ F4(铝键盘上的fn+ Shift+ )。F4

于 2013-09-28T05:47:25.893 回答
31

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

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"
    }]
}
于 2013-05-27T19:27:08.417 回答
20

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

于 2014-12-03T19:17:01.793 回答
10

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

,{ "keys": ["enter"], "command": "next_result", "context": [{"key": "selector", 
"operator": "equal", "operand": "text.find-in-files" }]}
于 2013-07-03T22:29:38.683 回答
5

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

于 2013-05-27T08:21:30.637 回答
3

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