Vim 错误格式多行字符串
Vim errorformat multiline string
我正在尝试为 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'
您没有收到 file/line 信息,因为 %E 指定使用该行的其余部分作为多行消息的开头。
首先尝试将“%Em”更改为“%E%f:%l:%c:%n: %m”,因为您基本上想保留从第一个版本抓取的所有原始数据错误格式。
您可能希望将“%Cm”更改为“%+Cm”以捕获错误输出中的所有行。
“%Z%f:%l:%c:%n: %m”看起来不错,应该用在第二行,因为 %E 会赶上第一行。
试试看。
我正在尝试为 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'
您没有收到 file/line 信息,因为 %E 指定使用该行的其余部分作为多行消息的开头。
首先尝试将“%Em”更改为“%E%f:%l:%c:%n: %m”,因为您基本上想保留从第一个版本抓取的所有原始数据错误格式。
您可能希望将“%Cm”更改为“%+Cm”以捕获错误输出中的所有行。
“%Z%f:%l:%c:%n: %m”看起来不错,应该用在第二行,因为 %E 会赶上第一行。
试试看。