簡體   English   中英

sublime插件:查找並選擇文本

[英]sublime plugin: find and select text

我得到了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方法。

我試過了

  1. 在google上找到: sublime插件查找並選擇文本
  2. 檢查api

但仍然沒有結果。

我不確定這種典型的方式。 但是,您可以通過以下方式實現此目的:

  1. 獲取當前文檔的內容。
  2. 搜索目標字符串以找出其開始和結束位置。 現在你有了起點和終點。
  3. 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)

你在API中有它,使用view.find(regex,pos)方法。

s = self.view.find("go_to_lineCommand", 0)
self.view.sel().add(s)

http://www.sublimetext.com/docs/3/api_reference.html

龍華的答案可能有所改進 - 將移動光標添加到目標線。

class FindcustomCommand(sublime_plugin.TextCommand):
    def _select(self):
        self.view.sel().clear()
        self.view.sel().add(self._target_region)

    def run(self, edit):
        TARGET = 'http://nabiraem'

        # 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)
        self._target_region = sublime.Region(begin, end)    
        self._select()
        self.view.show(self._target_region) # scroll to selection

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM