标签: errorformat

Visual Studio的Vim错误格式

我想将Vim的quickfix功能与Visual Studio的devenv构建过程或msbuild的输出一起使用.

我创建了一个名为build.bat的批处理文件,它执行devenv构建,如下所示:

devenv MySln.sln /Build Debug
Run Code Online (Sandbox Code Playgroud)

在vim我已经指出:make命令到该批处理文件:

:set makeprg=build.bat
Run Code Online (Sandbox Code Playgroud)

当我现在运行:make时,构建执行成功,但是错误不会被解析出来.所以如果我运行:cl或:cn我最终会看到devenv/Build的所有输出.我应该只看到错误.

我已经尝试了许多不同的错误格式设置,我在网络上的各个站点上找到了这些设置,但是没有一个设置正确地解析了错误.这里有一些我尝试过的:

set errorformat=%*\\d>%f(%l)\ :\ %t%[A-z]%#\ %m
set errorformat=\ %#%f(%l)\ :\ %#%t%[A-z]%#\ %m
set errorformat=%f(%l,%c):\ error\ %n:\ %f
Run Code Online (Sandbox Code Playgroud)

当然,我已经尝试过Vim的默认设置.

以下是build.bat的一些示例输出:

C:\TFS\KwB Projects\Thingy>devenv Thingy.sln /Build Debug 

Microsoft (R) Visual Studio Version 9.0.30729.1.
Copyright (C) Microsoft Corp. All rights reserved.
------ Build started: Project: Thingy, Configuration: Debug Any CPU ------
c:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.Linq.dll" …
Run Code Online (Sandbox Code Playgroud)

vim errorformat visual-studio

31
推荐指数
3
解决办法
5734
查看次数

Vim errorformat

我阅读了文档,但更加困惑.
我有编译器生成以下错误:

          rot;
          ^
"cpp\c1.cpp", line 13: error(114): identifier
          "rot" is undefined


1 error detected in the compilation of "c1.cpp".
Run Code Online (Sandbox Code Playgroud)

我知道如何检测给出错误行的行,但我在错误列表中得到了大量额外无用的信息,错误消息分为两行,我更愿意合并.

我的开始错误格式是:

:set efm=\"%f\"\\,\ line\ %l:\ error(%n):\ %m
Run Code Online (Sandbox Code Playgroud)

既然我们在这里,有没有一种快速测试efm的方法,而不是一直试着运行make?

vim errorformat

10
推荐指数
1
解决办法
3958
查看次数

在Vim的quickfix列表的errorformat中,错误类型是什么?

我不确定%tVim的quickfix列表中的格式说明符.它如何影响quickfix缓冲区的行为/显示?

我试着用以下测试文件找到它:

$ cat test.out
foo              Error         1 foo.h            foobar
bar              Error         2 foo.h            foobar
foobar           Warning       3 foo.h            foobar
barfoo           Warning       4 foo.h            foobar
Run Code Online (Sandbox Code Playgroud)

以下是errorformat第一个:

set errorformat+=%.%#%*\\s%.%#%*\\s%l\ %f%*\\s%m
Run Code Online (Sandbox Code Playgroud)

有了这个errorformat,我可以使用:cgetfile test.out并跳转到行号foo.h,但具有以下内容errorformat:

set errorformat+=%.%#%*\\s%t%.%#%*\\s%l\ %f%*\\s%m
Run Code Online (Sandbox Code Playgroud)

所有改变的是,现在我在quickfix缓冲区中的行号后面看到一些空格,例如我看到(1之后的两个空格)

foo.h|1  | foobar
Run Code Online (Sandbox Code Playgroud)

代替

foo.h|1| foobar
Run Code Online (Sandbox Code Playgroud)

所以我有两个问题:

  1. 我有什么问题errorformat
  2. 如果可以提取错误类型,我应该看到什么?

vim types errorformat

8
推荐指数
2
解决办法
1531
查看次数

如何在Vim中使用quickfix来调试Bash脚本

我每天都使用Vim来编写shell脚本.我一直在阅读关于quickfix窗口,我认为它可以加快我在编辑运行修复周期中的工作效率.

如果我理解正确,我必须编写自己的errorformat函数,以便Vim能够捕获错误并将它们引入quickfix窗口.但这似乎真的很复杂.

在编写Bash脚本时,是否有更简单/更方便的方法来利用Vim 中的quickfix窗口?

vim bash errorformat

8
推荐指数
1
解决办法
1873
查看次数

vim errorformat中一些高级模式的含义是什么?(%s,%+,%\\ @ =)

我试过阅读:help errorformat和谷歌搜索(主要是stackoverflow),但无法理解那里提到的一些模式:

  • %s- "指定要搜索的文本以找到错误行.[...]"
    • 嗯,首先,试着理解这句话,我在哪里把"文字搜索",在%s?之后?在它之前?或者,我不知道,这可能会污染整个模式吗?WTF?
    • 其次,这个模式实际上做了什么,它与模式中的常规文本有什么不同,比如某种类型set efm+=,foobar?这里的"foobar"对我来说也是"要搜索的文字"......:/
  • %+- 例如,我在一个问题中看到过类似的东西:%+C%.%#
    • 是否意味着整条线将附加到%m早期/后期多线模式中使用?如果是的话,那么如果没有%.%#(== regexp .*),但是,让我们说,%+Ccont.: %.%#- 那样的东西可以捕获cont.:字符串后的东西%m吗?
    • 还有,有什么之间的区别%C%.%#,并%+C%.%#%+G
    • 还有,有什么之间的区别%A%+A,或%E%+E
  • 最后,Python的示例以:help errorformat-multi-line下列字符结尾:%\\@=%m- WTF的%\\@=意思是什么?

我非常感谢帮助理解这些东西.

vim errorformat

8
推荐指数
1
解决办法
724
查看次数

如何将cscope输出放入Vim quickfix窗口?

我想将输出从cscope重定向到Vim quickfix窗口.胶水部分很容易,但我目前陷入错误格式.以下是cscope输出的示例(cscope -L -1 bar):

Format: "filename scope linenumber sourceline"
Example: "abc.cpp foo 25 bar()"
Run Code Online (Sandbox Code Playgroud)

这意味着在foo()中,在abc.cpp的第25行,调用bar().

efm = %f\ %*[^\ ]\ %l\ %m但工作但范围信息丢失.例如:

Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar()"
Run Code Online (Sandbox Code Playgroud)

我想要的是在quickfix窗口中包含范围,如下所示:

Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar() inside foo()"
Run Code Online (Sandbox Code Playgroud)

是否可以仅使用errorformat执行此操作,或者是否需要编写脚本来操作输出,然后再将其输送到Vim?

vim errorformat cscope

7
推荐指数
1
解决办法
4741
查看次数

Vim errorformat:在消息字符串中包含表达式的一部分

使用vim的errorformat语法,有没有办法在过滤结果时使用部分消息?

例如,除了错误本身之外,一些链接器错误没有任何明确的区别将它们区分为行上的错误:

/path/to/foo.cpp:42: undefined reference to 'UnimplementedFunction'
Run Code Online (Sandbox Code Playgroud)

要么

/path/to/foo.cpp:43: multiple definition of 'MultiplyDefinedFunction'
Run Code Online (Sandbox Code Playgroud)

使用错误格式:

set efm=%f:%l:\ %m
Run Code Online (Sandbox Code Playgroud)

会正确地捕获并显示这两个,但会错误地匹配许多其他情况(任何以"[string]:[number]:"开头的行).

或者,明确指定它们:

set efm=
set efm+=%f:%l:\ undefined\ reference\ to\ %m
set efm+=%f:%l:\ multiple\ definition\ of\ %m
Run Code Online (Sandbox Code Playgroud)

消除误报,但'消息'变得不那么有用 - 不再包含实际错误(只是在它之后的任何内容).


我缺少什么语法来处理这种情况?

理想情况下,我希望能够说出以下内容:

set efm+=%f:%l:\ %{StartMessage}undefined\ reference\ to\ %*\\S%{EndMessage}
set efm+=%f:%l:\ %{StartMessage}multiple\ definition\ of\ %*\\S%{EndMessage}
Run Code Online (Sandbox Code Playgroud)

...将StartMessage和EndMessage之间匹配的所有内容用作错误消息.

vim errorformat

7
推荐指数
1
解决办法
253
查看次数

Vim:错误格式匹配所有内容

我试图匹配以下错误efm:

AssertionError: 1 == 2
    at /home/strager/projects/blah/blah.js:13:37
Run Code Online (Sandbox Code Playgroud)

错误消息可以是任何内容(即它并不总是匹配AssertionError: .*.*Error: .*格式).一般格式是:

errormessage
    at filename:line:column
Run Code Online (Sandbox Code Playgroud)

我的问题是错误消息匹配任何行; 我需要将错误消息限制为仅一行,并且只有在匹配的"at"行后才匹配.

我尝试过以下方法efm:

set efm=%Z\ \ \ \ at\ %f:%l:%c,%E%m
" %Z    at %f:%l:%c,%E%m
Run Code Online (Sandbox Code Playgroud)

这几乎可以工作,但除了错误之外,它还匹配状态行(例如错误之前和之后的非错误).如何强制%E%m ... %Z总共只有两行(一行用于错误消息,一行用于at行)?makeprg如果需要,我可以访问标准的UNIX工具.

vim errorformat

6
推荐指数
1
解决办法
1789
查看次数

Vim errorformat和jslint

我试图让makeprg和errorformat使用VIM和jslint,并且似乎无法获得正确的错误格式...我正在使用jslint的nodejs版本,它产生的结果如下:

1 116,9: The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.
    for (var k in o)
Run Code Online (Sandbox Code Playgroud)

我基本上想要匹配行号,列和错误,并使用当前文件作为文件名.有人知道怎么做吗?

要清楚,我正在寻找errorformat来使这个命令工作.目前我的.vimrc文件有

augroup js
    set makeprg=jslint\ %
    set errorformat=%E%>%l,%c:%m,%Z
augroup END
Run Code Online (Sandbox Code Playgroud)

只是不工作(jslint工作正常,但错误格式错误)...

vim errorformat

5
推荐指数
3
解决办法
1312
查看次数

vim中的多行错误格式

我正在尝试匹配C错误消息,如下所示:

gmake[1]: Entering directory `/project/swbuild45/ethanl/swfeature_int/pkt'
...
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c: In function 'bfd_delete_constituent_session':
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654: error: 'bfd_ses' undeclared (first use in this function)
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654: error: (Each undeclared identifier is reported only once
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654: error: for each function it appears in.)
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3654: error: expected ';' before 'sion_cst'
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3663: error: 'dbl_dequ' undeclared (first use in this function)
sw/se/xc/bsd/routing/rib/src/rib_bfd_thrd.c:3663: error: expected ';' before 'eue'
...
gmake[1]: Leaving directory `/project/swbuild45/ethanl/swfeature_int/pkt'

到目前为止,我想出了这个:

errorformat=%f:%l:\ %m,%Dgmake[%\\d%\\*]:\ Entering\ directory\ `%f',%Xgmake[%\\d%\\*]:\ Leaving\ directory%s
Run Code Online (Sandbox Code Playgroud)

它打开文件并将我转到第一个错误,但我必须键入:cn四次才能得到第二个错误.我试图设置多行错误,但到目前为止我的错误字符串不起作用:

errorformat=%-Z%f:\ %s,%C%f:%l:\ %m,%A%f:\ %m,%Dgmake[%\\d%\\*]:\ Entering\ directory\ `%f',%Xgmake[%\\d%\\*]:\ …
Run Code Online (Sandbox Code Playgroud)

vim errorformat multiline

3
推荐指数
1
解决办法
627
查看次数

标签 统计

errorformat ×10

vim ×10

bash ×1

cscope ×1

multiline ×1

types ×1

visual-studio ×1