Sublimetext3 如何在Sublime Text 3中捕获忍者构建系统的输出?

Sublimetext3 如何在Sublime Text 3中捕获忍者构建系统的输出?,sublimetext3,build-system,ninja,Sublimetext3,Build System,Ninja,我正试图在Sublime Text 3中设置一个不支持的忍者构建系统。我用介子生成我的ninja.build文件。我的生成系统配置如下: ../src/View/Setup.vala:345.36-345.38: error: The name `loc' does not exist in the context of `View.Setup.setup_storage_location._lambda10_' storage_location = loc;

我正试图在Sublime Text 3中设置一个不支持的忍者构建系统。我用介子生成我的
ninja.build
文件。我的生成系统配置如下:

../src/View/Setup.vala:345.36-345.38: error: The name `loc' does not exist in the context of `View.Setup.setup_storage_location._lambda10_'
                storage_location = loc;
                                   ^^^
"file_regex": "^([^:]+):(\d+)?\.(\d+)-\d+\.\d+: (.*)"
{
“cmd”:[“忍者”、“-C”、“$folder/build/”],
“密钥文件”:[“介子.build”,“build.ninja”],
“file_regex:“^./([^:\n]*):([0-9]+)?。([0-9]+)(*):(*):(*)$”,
}
根据需要,我需要用正则表达式捕获2、3或4个组。示例错误如下所示:

../src/View/Setup.vala:345.36-345.38: error: The name `loc' does not exist in the context of `View.Setup.setup_storage_location._lambda10_'
                storage_location = loc;
                                   ^^^
"file_regex": "^([^:]+):(\d+)?\.(\d+)-\d+\.\d+: (.*)"
我可以使用
F4
跳转到错误,但即使第一组是文件,文件也没有打开。
即使忍者提供了错误的开始(行、列)和结束(行、列),我如何获得所有4个组(文件、行、列、消息)?

为了捕获升华支持的所有部分(文件、行/列和消息),您需要制作一个只捕获这些部分的
文件\u regex
。在这种情况下,这意味着您需要匹配(但不是捕获)结束范围,以便在结束时拾取错误消息

正则表达式可能看起来像这样:

../src/View/Setup.vala:345.36-345.38: error: The name `loc' does not exist in the context of `View.Setup.setup_storage_location._lambda10_'
                storage_location = loc;
                                   ^^^
"file_regex": "^([^:]+):(\d+)?\.(\d+)-\d+\.\d+: (.*)"
根据上面的输出,这将捕获文件名,前两个值为行和列,然后匹配,但忽略结束范围位置,将其他所有内容作为消息

还请注意,输出中的文件名是相对文件名,因此Sublime将尝试将其作为相对文件名打开。但是,当前目录可能不是您所期望的,因为Sublime的当前目录可能与您正在执行构建的目录不同

如果您看到即使使用当前的正则表达式,文件似乎也没有打开(但创建了一个选项卡),这就是发生这种情况的原因

要解决这个问题,您需要将错误中显示的所有文件名都作为绝对路径,或者需要将
working\u dir
键添加到构建系统中,以明确指定路径的相对位置

这方面的一个例子如下:

    "working_dir": "${folder:${project_path:${file_path}}}",

这将工作目录设置为侧边栏中的第一个顶级文件夹,如果没有文件夹,则返回到当前项目的存储位置,如果也没有项目,则返回到当前文件的路径。

感谢您提供的非常详细的答案。它正在引导我走向正确的方向。