我得到了 sublime text 3 插件,可以让我将光标移动到其编号的行:

import sublime, sublime_plugin

class prompt_goto_lineCommand(sublime_plugin.WindowCommand):

    def run(self):
        self.window.show_input_panel("Goto Line:", "", self.on_done, None, None)
        pass

    def on_done(self, text):
        try:
            line = int(text)
            if self.window.active_view():
                self.window.active_view().run_command("goto_line", {"line": line} )
        except ValueError:
            pass

class go_to_lineCommand(sublime_plugin.TextCommand):

    def run(self, edit, line):
        # Convert from 1 based to a 0 based line number
        line = int(line) - 1

        # Negative line numbers count from the end of the buffer
        if line < 0:
            lines, _ = self.view.rowcol(self.view.size())
            line = lines + line + 1

        pt = self.view.text_point(line, 0)

        self.view.sel().clear()
        self.view.sel().add(sublime.Region(pt))

        self.view.show(pt)

我想改进它,让我将光标移动到包含指定字符串的第一行。这就像搜索文件:
例如,如果传递给它字符串 "class go_to_lineCommand" 插件必须将光标移动到第 17 行:

并可能选择字符串 class go_to_lineCommand

问题简化为找到 regionWithGivenString ,然后我可以选择它:
self.view.sel().add(regionWithGivenString)

但不知道获取 regionWithGivenString 的方法。

我尝试过了
  • 在谷歌上找到:sublime plugin find and select text
  • 检查 api

  • 但是还是没有结果。

    最佳答案

    我不确定典型的方式。但是,您可以通过以下方式实现此目的:

  • 获取当前文档的内容。
  • 搜索目标字符串以找出其开始和结束位置。现在你有了起点和终点。
  • Region(start, end) 添加到选择中。

  • 例子:
    def run(self, edit, target):
        if not target or target == "":
            return
    
        content = self.view.substr(sublime.Region(0, self.view.size()))
        begin = content.find(target)
        if begin == -1:
            return
        end = begin + len(target)
        target_region = sublime.Region(begin, end)
        self.view.sel().clear()
        self.view.sel().add(target_region)
    

    关于python - Sublime 插件 : find and select text,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19721965/

    10-11 22:30
    查看更多