Vim errorformat multiline string

时间:2015-06-09 17:52:56

标签: javascript vim syntastic errorformat flowtype

我正在尝试解析Flow的错误输出。在第一个错误中,它是真正重要的第二个文件和行号,而不是第一个。我想告诉vim使用第二个文件条目。 (所以在这种情况下,位置列表应该跳转到source.js第94行,而不是第20行)

/Users/asdf/source.js:20:22,34:1: property hidden
Property not found in
/Users/asdf/source.js:94:10,106:3: object literal

/Users/asdf/source.js:25:14,18: identifier strin
Could not resolve name

Here's the error format currently defined for flow:除了它使用第一个文件名而不是第二个文件名外,它有效。

let errorformat =
    \ '%f:%l:%c:%n: %m,' .
    \ '%f:%l:%c: %m'

尝试解决方案

我一直在尝试使用多行错误格式,但我不知道自己在做什么。阅读:help errorformat之后,似乎这样的事情应该可行,但它只是将整个错误加载到消息中,没有文件/行信息。它还使用第一个条目而不是第三个条目匹配第二个错误。

let errorformat =
    \ '%E%m,%C%m,%Z%f:%l:%c:%n: %m,' .
    \ '%f:%l:%c:%n: %m,' .
    \ '%f:%l:%c: %m'

更新

感谢lcd047,他指出我没有匹配正确的输出。 Syntastic将错误格式化如下,全部在一行:

/Users/seanhess/projects/serials/web/app/model/source.js:20:22: property hidden Property not found in object literal (/Users/seanhess/projects/serials/web/app/model/source.js:94:10,106:3)

所以,新问题,如何匹配第二个位置而不是第一个?我想我宁愿忽略第一个位置。

更新答案 - 这有效:

let errorformat =
    \ '%.%#: %m (%f:%l:%c\,%.%#),' .
    \ '%f:%l:%c:%n: %m,' .
    \ '%f:%l:%c: %m'

1 个答案:

答案 0 :(得分:1)

您没有收到文件/行信息,因为%E指定使用该行的其余部分作为多行消息的开头。

尝试更改"%Em"到"%E%f:%l:%c:%n:%m"对于初学者来说,因为你基本上想要保留从第一版errorformat中获取的所有原始数据。

您可能想要更改"%Cm"到"%+ Cm"捕获错误输出中的所有行。

"%Z%f:%l:%c:%n:%m"看起来很好,应该在第二行使用,因为%E将捕获第一行。

试试。

相关问题