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

问题描述 投票:0回答:1

我正在尝试在Sublime Text 3中设置不受支持的忍者构建系统。我用介子生成ninja.build文件。我的构建系统是这样配置的:

{
    "cmd": ["ninja", "-C", "$folder/build/"],
    "keyfiles": ["meson.build", "build.ninja"],
    "file_regex": "^../([^:\n]*):([0-9]+)?.([0-9]+)?(.*):? (.*)$",
}

根据manual,我需要使用Regex捕获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;
                                   ^^^

我可以用F4跳转到错误,但是即使第一个组是文件也没有打开文件。即使忍者提供了错误的开始(行,列)和结束(行,列),我如何获得全部4个组(文件,行,列,消息)?

sublimetext3 build-system ninja
1个回答
1
投票

为了捕获Sublime支持的所有部分(文件,行/列和消息),您需要制作一个file_regex以仅捕获那些部分。在这种情况下,这意味着您需要匹配(但不捕获)末端范围,以便可以从末端获得错误消息。

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

"file_regex": "^([^:]+):(\d+)?\.(\d+)-\d+\.\d+: (.*)"

根据上面的输出,它将捕获文件名,前两个值分别作为行和列,然后匹配,但忽略结束范围位置,将其他所有内容作为消息。

也请注意,输出中的文件名是相对文件名,因此Sublime会尝试这样打开它们。但是,当前目录可能不是您期望的,因为Sublime的当前目录可能与您的构建执行位置不同。

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

要解决该问题,您要么需要将所有错误显示的文件名都作为绝对路径,要么需要在构建系统中添加working_dir键以明确指定路径的相对位置。

一个例子如下:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.