Sublimetext3 如何使用升华文本对具有相同标记的段落进行分组或显示?

Sublimetext3 如何使用升华文本对具有相同标记的段落进行分组或显示?,sublimetext3,sublimetext2,sublimetext,text-editor,multiple-cursor,Sublimetext3,Sublimetext2,Sublimetext,Text Editor,Multiple Cursor,我在Sublime文本中有这样一个文本(通常是一个非常大的文本文件): 如何使用升华文本对与#tag2相关的段落进行分组或仅显示?是否可以使用“多光标”或其他技术 这是所需的输出:#tag2段落先移动,然后在末尾移动其余段落: #tag1 #tag2 Hello world, here is some text #tag2 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incid

我在Sublime文本中有这样一个文本(通常是一个非常大的文本文件):

如何使用升华文本对与
#tag2
相关的段落进行分组或仅显示?
是否可以使用“多光标”或其他技术

这是所需的输出:
#tag2
段落先移动,然后在末尾移动其余段落:

#tag1 #tag2
Hello world, here is some text

#tag2 
Lorem ipsum dolor sit amet, consectetur adipiscing elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna 

#tag3
Something else

#tag4
Blah
Blah

#foo
bar
到目前为止,我一直在尝试:CTRL+F和
#tag2
,然后浏览不同的匹配项以查找与此标记相关的所有内容


注意:我不是在寻找命令行方法,而是在Sulbime文本中寻找一种方便的方法,以便能够快速浏览带有标签组织的注释/段落的巨大文本文档。

没有简单的内置方法来完成类似的操作。正如您所提到的,您可以搜索有问题的标记并在结果之间跳过。您还可以尝试创建一个只匹配您感兴趣的标记(及其内容)的正则表达式,然后执行
Find All
选择它们并将它们剪切粘贴到顶部。但是,根据文件的内容,这可能可行,也可能不可行

一种可能的方法是为注释创建某种自定义语法,以便利用内置的符号列表功能

%YAML 1.2
---
#看http://www.sublimetext.com/docs/3/syntax.html
范围:text.plain.notes
文件扩展名:
-注释
上下文:
主要内容:
-匹配:“^\s*(#\w+”
捕获:
1:entity.name.type
推送:
-匹配:“#\w+”
范围:entity.name.type
-匹配:$
波普:没错
如果将此简单示例语法(仅限ST3)应用于notes文件,则所有标记都将以语法突出显示,并显示在符号列表中,允许您使用
Goto>Goto-symbol

在这种情况下,标记将按照它们在文件中的显示顺序显示在符号列表中,但您可以输入一些过滤文本来过滤列表,并轻松地在它们之间跳过。您还可以通过
Goto>Goto Anything
直接在标记处打开文件

此外,当光标位于标记上时,
Goto>Goto defination…
将显示一个快速面板,给出该标记的其他位置(如果有),包括当前文件和其他文件中的位置,允许您跳转到适当的位置

对于您在问题中提到的可能会使文件内容混乱的内容,您需要一个插件

下面是这样一个插件的示例,它假设标记总是单独出现在行上,并且在下一行标记之前,所有跟随它们的东西都是主体(如示例文本中所示)

导入升华
导入升华插件
进口稀土
#与单个标记以及包含
#一个或多个标记。请注意,下面的代码假定带有标记的行
#仅包含标记,不包含其他内容。
_tag_regex=r“#\w+”
_tag_line_regex=r“^[\t]*(?:(?:#\w+)\s*){1,}”
#命令调色板输入处理程序仅在Sublime构建3154和3154中受支持
#以后,请注意不要在以前的版本中使用它们。
st_ver=int(sublime.version())
HandlerBase=sublime\u plugin.ListInputHandler如果st\u ver>=3154 else对象
类别TaginPurtHandler(HandlerBase):
"""
名为“tag”的命令参数的输入处理程序;尝试提供列表
当前文件中出现的标记的数目(如果有)。所选值变为
参数的值。
"""
定义初始化(自,视图):
self.view=view
def占位符(自身):
返回“要移动的标记”
def列表_项(自身):
tags=set()
tag\u line=self.view.find\u all(\u tag\u line\u regex)
对于标记线中的区域:
line=self.view.substr(区域)
tags.update(关于findall(_tag_regex,line))
如果没有标签:
升华状态消息(“文件不包含标签”)
返回列表(已排序(标记))
类TagToTopCommand(升华插件.TextCommand):
def运行(自我、编辑、标记=无):
如果标记为“无”:
返回self.prompt_标记()
#查找包含标记的所有行;他们被认为是新世纪的开始
#部分。
lines=self.view.find\u all(\u tag\u line\u regex)
匹配=[]
eof=sublime.Region(self.view.size())
#保留所有包含给定标记的标记行。发现
#修改区域,使其从标记线的起点开始
#并在以下标记节(或文件结尾)的开始处结束
#因此,该区域完全包含这些标记的数据。
对于idx,枚举中的行(行):
结束=行[idx+1],如果idx+1#tag1 #tag2
Hello world, here is some text

#tag2 
Lorem ipsum dolor sit amet, consectetur adipiscing elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna 

#tag3
Something else

#tag4
Blah
Blah

#foo
bar