gpt4 book ai didi

python - Sublime Text 插件 - 如何查找选择中的所有区域

转载 作者:行者123 更新时间:2023-11-30 22:52:20 33 4
gpt4 key购买 nike

如何查找选择中的所有区域(区域类型也是如此)?如果我们调用这个方法:

def chk_links(self,vspace):
url_regions = vspace.find_all("https?://[^\"'\s]+")

i=0
for region in url_regions:
cl = vspace.substr(region)
code = self.get_response(cl)
vspace.add_regions('url'+str(i), [region], "mark", "Packages/User/icons/"+str(code)+".png")
i = i+1
return i

在 View 上下文中,例如:

chk_links(self.view)

一切正常,但以这种方式:

chk_links(self.view.sel()[0])

我收到错误:AttributeError:“Region”对象没有属性“find_all”

插件的完整代码你可以找到 here

Sublime "View" method documentation

最佳答案

Selection 类(由 View.sel() 返回)本质上只是表示当前选择的 Region 对象的列表。 Region 可以为空,因此列表始终包含至少一个长度为 0 的区域。

唯一methods available on the Selection class是修改和查询它的范围。类似methods are available on the Region class .

可以做的是找到您的代码当前正在执行的所有有趣区域,然后当您迭代它们以执行检查时,查看它们是否包含在选择中或不。

这是上面示例的精简版本来说明这一点(为了清楚起见,您的一些逻辑已被删除)。首先收集整个 URL 列表,然后在迭代列表时,仅当没有没有选择或存在时才考虑每个区域 选择并且 URL 区域包含在选择范围内。

import sublime, sublime_plugin

class ExampleCommand(sublime_plugin.TextCommand):
# Check all links in view
def check_links(self, view):
# The view selection list always has at least one item; if its length is
# 0, then there is no selection; otherwise one or more regions are
# selected.
has_selection = len(view.sel()[0]) > 0

# Find all URL's in the view
url_regions = view.find_all ("https?://[^\"'\s]+")

i = 0
for region in url_regions:
# Skip any URL regions that aren't contained in the selection.
if has_selection and not view.sel ().contains (region):
continue

# Region is either in the selection or there is no selection; process
# Check and
view.add_regions ('url'+str(i), [region], "mark", "Packages/Default/Icon.png")
i = i + 1

def run(self, edit):
if self.view.is_read_only() or self.view.size () == 0:
return
self.check_links (self.view)

关于python - Sublime Text 插件 - 如何查找选择中的所有区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38632861/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com