首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建立多行错误信息的设置格式

建立多行错误信息的设置格式
EN

Stack Overflow用户
提问于 2019-11-22 16:57:03
回答 1查看 349关注 0票数 2

我正在尝试设置 errorformat for 杀虫剂,它生成以下输出。

代码语言:javascript
复制
ghcide version: 0.0.4 (GHC: 8.6.5)
Ghcide setup tester in /opt/devel/haskell/haskell-vim-now.
Report bugs at https://github.com/digital-asset/ghcide/issues

Step 1/6: Finding files to test in /opt/devel/haskell/haskell-vim-now
Found 1 files

Step 2/6: Looking for hie.yaml files that control setup
Found 1 cradle

Step 3/6, Cradle 1/1: Implicit cradle for /opt/devel/haskell/haskell-vim-now
Cradle {cradleRootDir = "/opt/devel/haskell/haskell-vim-now", cradleOptsProg = CradleAction: default}

Step 4/6, Cradle 1/1: Loading GHC Session

Step 5/6: Initializing the IDE

Step 6/6: Type checking the files
File:     foo.hs
Range:    1:4-1:5
Source:   typecheck
Severity: DsError
Message: 
  ESC[0;91mfoo.hs:1:5: error:
  • No instance for (Num String) arising from the literal ‘5’
  • In the expression: 5
  In an equation for ‘x’: x = 5ESC[0m
Completed (1 file worked, 0 files failed)

使用以下~/.vim/compiler/ghcide.vim

代码语言:javascript
复制
CompilerSet  errorformat=%-Gghcide\ %s
CompilerSet  errorformat+=%-GReport\ bugs\ at\ %s
CompilerSet  errorformat+=%-GStep\ %s
CompilerSet  errorformat+=%-GFound\ %s
CompilerSet  errorformat+=%-GCradle\ %s
CompilerSet  errorformat+=%-GRange:\ %s
CompilerSet  errorformat+=%-GFile:\ %s
CompilerSet  errorformat+=%-GSource:\ %s
CompilerSet  errorformat+=%-GSeverity:\ %s
CompilerSet  errorformat+=%-GCompleted\ %s
" exclude empty or whitespace-only lines
CompilerSet  errorformat+=%-G\\s%#
CompilerSet  errorformat+=%E!\ Message:%>%trror%m
setlocal makeprg=ghcide\ %

Quickfix缓冲区只显示剩余的四行:

代码语言:javascript
复制
:clist                                                                                                                                                                                                             
 1: Message:-                                                                                                                                                                                                      
 2:   ^[[0;91mfoo.hs:1:5: error:                                                                                                                                                                                   
 3:   • No instance for (Num String) arising from the literal ‘5’                                                                                                                                                  
 4:   • In the expression: 5  

由于我自己不知道如何将上述多行消息映射到单个clist条目中,所以我正在寻求帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-24 18:34:16

你可以试试这个:

代码语言:javascript
复制
CompilerSet errorformat=%-Gghcide\ %s
CompilerSet errorformat+=%-GReport\ bugs\ at\ %s
CompilerSet errorformat+=%-GStep\ %s
CompilerSet errorformat+=%-GFound\ %s
CompilerSet errorformat+=%-GCradle\ %s
CompilerSet errorformat+=%-GRange:\ %s
CompilerSet errorformat+=%-GFile:\ %s
CompilerSet errorformat+=%-GSource:\ %s
CompilerSet errorformat+=%-GSeverity:\ %s
CompilerSet errorformat+=%-GCompleted\ %s
" exclude empty or whitespace-only lines
CompilerSet errorformat+=%-G\\s%#
CompilerSet errorformat+=%EMessage:%\\s%#%>
CompilerSet errorformat+=%C%\\s%#ESC[%\\d%#;%\\d%#m%f:%l:%c:%m
CompilerSet errorformat+=%C%m
CompilerSet errorformat+=%ZCompleted%m

与原始代码的不同之处在于最后4行代码:

代码语言:javascript
复制
CompilerSet errorformat+=%EMessage:%\\s%#%>
CompilerSet errorformat+=%C%\\s%#ESC[%\\d%#;%\\d%#m%f:%l:%c:%m
CompilerSet errorformat+=%C%m
CompilerSet errorformat+=%ZCompleted%m

最初,您使用的是:

代码语言:javascript
复制
CompilerSet  errorformat+=%E!\ Message:%>%trror%m

但是在您提供的编译器输出中,Message:行的开头并不是bang和空格,所以我认为应该删除它。

此外,%E已经将条目的类型设置为error,因此不需要%t。并且该行上没有消息(消息位于下一行),因此不需要%m。最后,在输出中有一个尾随空格,所以您需要%\\s%#

所有这些都说明:

代码语言:javascript
复制
CompilerSet errorformat+=%EMessage:%\\s%#%>

但是您仍然需要提取文件名和行/列位置,这可以通过resp获得。%f%l%c

代码语言:javascript
复制
CompilerSet errorformat+=%C%\\s%#ESC[%\\d%#;%\\d%#m%f:%l:%c:%m

注意,格式以%C开头,它告诉Vim它匹配多行消息的延续(参见:h errorformat-multi-line)。

最后,我认为您需要消息的其余部分,直到您可以使用Completed行:

代码语言:javascript
复制
CompilerSet errorformat+=%C%m
CompilerSet errorformat+=%ZCompleted%m
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58998632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档