Sublime Text 插件 - 如何在选择中找到所有区域
Sublime Text plugin - how to find all regions in selection
如何找到选择中的所有区域(还有区域类型)?
如果我们调用这个方法:
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
在视图上下文中,例如:
chk_links(self.view)
一切正常,但以这种方式:
chk_links(self.view.sel()[0])
我收到错误:AttributeError:'Region' 对象没有属性 'find_all'
您可以找到插件的完整代码here
Selection
class(由 View.sel()
返回)本质上只是代表当前选择的 Region
对象的列表。 Region
可以为空,因此列表始终包含至少一个长度为 0 的区域。
唯一methods available on the Selection
class are to modify and query it's extents. Similar methods are available on the Region
class.
您 可以 做的是像您的代码当前正在做的那样找到所有有趣的区域,然后当您迭代它们以执行检查时,看看它们是否是否包含在选择中。
这是您上面示例的精简版本来说明这一点(为清楚起见,您的一些逻辑已被删除)。首先收集 URL 的整个列表,然后随着列表的迭代,每个区域仅在存在 NO[=35= 时才被考虑] 选择或者如果 有 选择 AND 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)
如何找到选择中的所有区域(还有区域类型)? 如果我们调用这个方法:
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
在视图上下文中,例如:
chk_links(self.view)
一切正常,但以这种方式:
chk_links(self.view.sel()[0])
我收到错误:AttributeError:'Region' 对象没有属性 'find_all'
您可以找到插件的完整代码here
Selection
class(由 View.sel()
返回)本质上只是代表当前选择的 Region
对象的列表。 Region
可以为空,因此列表始终包含至少一个长度为 0 的区域。
唯一methods available on the Selection
class are to modify and query it's extents. Similar methods are available on the Region
class.
您 可以 做的是像您的代码当前正在做的那样找到所有有趣的区域,然后当您迭代它们以执行检查时,看看它们是否是否包含在选择中。
这是您上面示例的精简版本来说明这一点(为清楚起见,您的一些逻辑已被删除)。首先收集 URL 的整个列表,然后随着列表的迭代,每个区域仅在存在 NO[=35= 时才被考虑] 选择或者如果 有 选择 AND 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)