Vim的错误格式运用于为Visual Studio(Vim errorformat for Visu

2019-07-28 22:22发布

我想使用Vim的QuickFix功能与Visual Studio的devenv的生成过程或MSBuild的输出。

我创建了一个名为的build.bat它执行devenv的建立这样一个批处理文件:

devenv MySln.sln /Build Debug

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

:set makeprg=build.bat

当我现在运行:制造,构建成功执行,但错误没有得到解析出来。 所以,如果我运行:氯或:CN我最终看到从devenv的所有输出/建造。 我只看到错误。

我已经尝试了一些,我已经在四处撒网各个网站发现不同的错误格式运用于设置,但他们都没有正确地解析出错误。 下面是一些我已经试过:

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

当然,我已经试过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" /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\UIAutomationProvider.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\Thingy.exe /resource:obj\Debug\Thingy.g.resources /resource:obj\Debug\Thingy.Properties.Resources.resources /target:winexe App.xaml.cs Controller\FieldFactory.cs Controller\UserInfo.cs Data\ThingGatewaySqlDirect.cs Data\ThingListFetcher.cs Data\UserListFetcher.cs Gui\FieldList.xaml.cs Interfaces\IList.cs Interfaces\IListFetcher.cs Model\ComboBoxField.cs Model\ListValue.cs Model\ThingType.cs Interfaces\IThingGateway.cs Model\Field.cs Model\TextBoxField.cs Model\Thing.cs Gui\MainWindow.xaml.cs Gui\ThingWindow.xaml.cs Interfaces\IField.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Properties\Settings.Designer.cs RequiredValidation.cs "C:\TFS\KwB Projects\Thingy\Thingy\obj\Debug\Gui\FieldList.g.cs" "C:\TFS\KwB Projects\Thingy\Thingy\obj\Debug\Gui\MainWindow.g.cs" "C:\TFS\KwB Projects\Thingy\Thingy\obj\Debug\Gui\ThingWindow.g.cs" "C:\TFS\KwB Projects\Thingy\Thingy\obj\Debug\App.g.cs" "C:\TFS\KwB Projects\Thingy\Thingy\obj\Debug\GeneratedInternalTypeHelper.g.cs"
C:\TFS\KwB Projects\Thingy\Thingy\Controller\FieldFactory.cs(14,19): error CS0246: The type or namespace name 'IFieldNothing' could not be found (are you missing a using directive or an assembly reference?)

Compile complete -- 1 errors, 0 warnings
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========

更新:它看起来像使用的MSBuild而不是devenv的大概是去(按周杰伦的评论)的正确途径。

使用的MSBuild的makeprg将是:

:set makeprg=msbuild\ /nologo\ /v:q

示例输出是对子级:

Controller\FieldFactory.cs(14,19): error CS0246: The type or namespace name 'IFieldNothing' could not be found (are you missing a using directive or an assembly reference?)

它看起来像这里的棘手的部分可能在于一个事实,即路径是相对的.csproj文件,而不是.sln文件是在Vim的当前目录位于一个目录中的.csproj文件之上。

答:我理解了它...

set errorformat=\ %#%f(%l\\\,%c):\ %m

这将捕获两个devenv的/生成和MSBuild的输出。 然而,MSBuild的有一个陷阱。 默认情况下,它的输出不包含完整路径。 为了解决这个问题,你必须以下行添加到您的csproj文件的主要的PropertyGroup:

<GenerateFullPaths>True</GenerateFullPaths>

Answer 1:

我有一个博客帖子它通过让在Vim的C#项目的建设,包括错误格式的所有细节散步。 你可以在这里找到它: http://kevin-berridge.blogspot.com/2008/09/vim-c-compiling.html

总之,你需要以下条件:

:set errorformat=\ %#%f(%l\\\,%c):\ %m
:set makeprg=msbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true


Answer 2:

从问题复制到从“悬而未决”名单中删除

set errorformat=\ %#%f(%l\\\,%c):\ %m

这将捕获两个输出devenv /Build和的MSBuild。 然而,MSBuild的有一个陷阱。 默认情况下,它的输出不包含完整路径。 为了解决这个问题,你必须以下行添加到您的csproj文件的主要的PropertyGroup:

<GenerateFullPaths>True</GenerateFullPaths>


Answer 3:

我发现了一个更好的答案:使用:compiler使用内置的efm设置。

" Microsoft C#
compiler cs
" Microsoft Visual C++
compiler msvc
" mono
compiler mcs
" gcc
compiler gcc

注:它还设置默认makeprg 。 见$ VIMRUNTIME /编译器/



Answer 4:

尝试运行的MSBuild的,而不是devenv的。 这将如何构建运行开辟一吨的力量。

打开Visual Studio命令提示符下,得到你的路径设置。 然后做msbuild MySln.sln /Configuration:Debug

msbuild /? 求助。



Answer 5:

寻找错误格式运用于在Visual Studio编译C ++时,我发现这个问题。 以上答案不为我工作(我不使用的MSBuild要么)。

我想通了,这个从这个Vim的提示和:help errorformat

" filename(line) : error|warning|fatal error C0000: message
set errorformat=\ %#%f(%l)\ :\ %#%t%[A-z]%#\ %[A-Z\ ]%#%n:\ %m

这将给你一个和quickfix看起来像这样:

stats.cpp|604 error 2039| 'getMedian' : is not a member of 'Stats'

(有误差突出显示)从

c:\p4\main\stats.cpp(604) : error C2039: 'getMedian' : is not a member of 'Stats'


Answer 6:

正如西蒙巴肯提到你可以使用这个在您的项目生成输出的完整路径:

<GenerateFullPaths>True</GenerateFullPaths>

但你可以把它加更便携/property:GenerateFullPaths=true给你makeprg添加上述到项目文件代替。

:set makeprg=msbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true\


Answer 7:

这些errorformats没有在Visual Studio 2009中v9.0.21022.8专业版工作。 使用Cygwin,不得不向这使得设置makeprg有点棘手(螺丝批处理文件)的bash调用devenv的。 也不得不调整我的错误格式运用于时devenv的分成多个进程并进行错误消息以“1>”或“2>”等:

set autowrite
"2>c:\cygwin\home\user\proj/blah.cpp(1657) : error C2065: 'blah' : undeclared identifier

set errorformat=%.%#>\ %#%f(%l)\ :\ %#%t%[A-z]%#\ %[A-Z\ ]%#%n:\ %m
let prg="devenv"
let makepath=$MAKEPATH
let &makeprg='cmd /c "'.prg.' '.makepath.'"'

我的.bashrc将使用cygpath转换为DOS兼容的路径MAKEPATH环境变量:

export MAKEPATH="$(cygpath -d "proj/VC9/some.sln") /build \"Debug\""

如果你有Vim 6.x版本,你可以使用:CW比CLIST好得多(试行数百警告中寻找错误,你知道我的意思)。 看着VIM的调整让我想呕吐,但我在vim天堂! 再见视觉工作室! 感谢您的基地调整pydave +1。



文章来源: Vim errorformat for Visual Studio