我们的项目中有我们的lex / yacc生成的编译器,我的构建日志是这样的:
[timestamp] [info/debug/warning/error] [compiler pid] [filename/line] message
此构建错误日志的格式为:
let &errorformat = '[%.%#]%*[ \t][%t%*[A-Z]]%*[ \t][%n]%*[ \t][%f:%l]%m'
我的.vimrc用这一行:
mysource/impl.cpp|25 info 1743| Syntax warning
我可以使用" vi -q builderror.txt"并在quickfix窗口中显示如下:
mysource/impl.cpp|25 info 1743| Syntax warning [2017-02-13 16:37:41.123456]
好的没问题。
sealed trait newADT {
val Id: Int
}
object newADTs {
val value1 = VALUE1
val value2 = VALUE2
def apply(id: Int) = id match {
case value1.Id => value1
case value2.Id => value2
}
}
case object VALUE1 extends newADT {
override val Id: Int = 1
}
case object VALUE2 extends newADT{
override val Id: Int = 2
}
然后我可以浏览所有构建错误并知道每个编译步骤所花费的时间。
那么如何显示我"设置efm ="或"让& errorformat ="?感谢。
答案 0 :(得分:2)
单靠errorformat
您无法做到这一点。您需要预处理错误以在解析之前移动时间戳。具体如何做到这一点取决于你如何解析所说的错误。
答案 1 :(得分:1)
正如@ sato-katsura所说,你必须移动Vim的时间戳,将其作为errorformat
的一部分来接收。
这是在类UNIX系统上执行此操作的一种方法...
更改errorformat
中的vimrc
:
let &errorformat = '[%t%*[A-Z]]%*[ \t][%n]%*[ \t][%f:%l]%m'
按摩builderror.txt
:
$ vim -q <(sed 's/^\(\[[^]]*\]\) \(.*\)/\2 \1/g' builderror.txt)
如果您不想在全球范围内更改errorformat
,可以......
将该行放在目录根目录的本地exrc
中,请参阅:help 'exrc'
;
将该行放在目录根目录的本地efm.txt
中,然后像这样使用它:
$ vim --cmd "source efm.txt" -q <(sed 's/^\(\[[^]]*\]\) \(.*\)/\2 \1/g' builderror.txt)
将所有这些放在简单的bash脚本中:
#!/usr/bin/env bash
[ $# -eq 1 ] && vim --cmd "let &errorformat = '[%t%*[A-Z]]%*[ \t][%n]%*[ \t][%f:%l]%m'" -q <(sed 's/^\(\[[^]]*\]\) \(.*\)/\2 \1/g' "$1")
可能还有十几个其他解决方案/解决方法......