我正在尝试在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个组(文件,行,列,消息)?
为了捕获Sublime支持的所有部分(文件,行/列和消息),您需要制作一个file_regex
以仅捕获那些部分。在这种情况下,这意味着您需要匹配(但不捕获)末端范围,以便可以从末端获得错误消息。
该正则表达式可能看起来像这样:
"file_regex": "^([^:]+):(\d+)?\.(\d+)-\d+\.\d+: (.*)"
根据上面的输出,它将捕获文件名,前两个值分别作为行和列,然后匹配,但忽略结束范围位置,将其他所有内容作为消息。
也请注意,输出中的文件名是相对文件名,因此Sublime会尝试这样打开它们。但是,当前目录可能不是您期望的,因为Sublime的当前目录可能与您的构建执行位置不同。
[如果您看到即使使用当前的正则表达式,该文件似乎也没有打开(但创建了选项卡),这就是发生这种情况的原因。
要解决该问题,您要么需要将所有错误显示的文件名都作为绝对路径,要么需要在构建系统中添加working_dir
键以明确指定路径的相对位置。
一个例子如下:
"working_dir": "${folder:${project_path:${file_path}}}",
这会将工作目录设置为边栏中的第一个顶级文件夹,如果不存在文件夹,则退回到当前项目的存储位置,如果也没有文件夹,则退回到当前文件的路径项目。