visual-studio Visual Studio 的 Vim 错误格式
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/101270/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Vim errorformat for Visual Studio
提问by Kevin Berridge
I want to use Vim's quickfix features with the output from Visual Studio's devenv build process or msbuild.
我想在 Visual Studio 的 devenv 构建过程或 msbuild 的输出中使用 Vim 的快速修复功能。
I've created a batch file called build.bat which executes the devenv build like this:
我创建了一个名为 build.bat 的批处理文件,它像这样执行 devenv 构建:
devenv MySln.sln /Build Debug
In vim I've pointed the :make command to that batch file:
在 vim 中,我已将 :make 命令指向该批处理文件:
:set makeprg=build.bat
When I now run :make, the build executes successfully, however the errors don't get parsed out. So if I run :cl or :cn I just end up seeing all the output from devenv /Build. I should see only the errors.
当我现在运行 :make 时,构建成功执行,但是错误没有被解析出来。因此,如果我运行 :cl 或 :cn ,我最终会看到 devenv /Build 的所有输出。我应该只看到错误。
I've tried a number of different errorformat settings that I've found on various sites around the net, but none of them have parsed out the errors correctly. Here's a few I've tried:
我已经尝试了许多不同的错误格式设置,我在网络上的各个站点上找到了这些设置,但没有一个能够正确解析错误。这是我尝试过的一些:
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
And of course I've tried Vim's default.
当然,我已经尝试过 Vim 的默认设置。
Here's some example output from the build.bat:
以下是 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 ==========
UPDATE:It looks like using msbuild instead of devenv is probably the right way to go (as per Jay's comment).
更新:看起来使用 msbuild 而不是 devenv 可能是正确的方法(根据 Jay 的评论)。
Using msbuild the makeprg would be:
使用 msbuild makeprg 将是:
:set makeprg=msbuild\ /nologo\ /v:q
Sample output whould be:
示例输出应该是:
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?)
It looks like the tricky part here may lie in the fact that the path is relative to the .csproj file, not the .sln file which is the current directory in Vim and lies one directory above the .csproj file.
看起来这里的棘手部分可能在于路径是相对于 .csproj 文件,而不是 .sln 文件,后者是 Vim 中的当前目录并且位于 .csproj 文件上方的一个目录。
ANSWER:I figured it out...
答案:我想出来了……
set errorformat=\ %#%f(%l\\,%c):\ %m
This will capture the output for both devenv /Build and msbuild. However, msbuild has one catch. By default, it's output doesn't include full paths. To fix this you have to add the following line to your csproj file's main PropertyGroup:
这将捕获 devenv /Build 和 msbuild 的输出。但是,msbuild 有一个问题。默认情况下,它的输出不包括完整路径。要解决此问题,您必须将以下行添加到 csproj 文件的主 PropertyGroup:
<GenerateFullPaths>True</GenerateFullPaths>
采纳答案by Kevin Berridge
I have a blog post which walks through all the details of getting C# projects building in Vim, including the error format. You can find it here: http://kevin-berridge.blogspot.com/2008/09/vim-c-compiling.html
我有一篇博文详细介绍了在 Vim 中构建 C# 项目的所有细节,包括错误格式。你可以在这里找到它:http: //kevin-berridge.blogspot.com/2008/09/vim-c-compiling.html
In short you need the following:
简而言之,您需要以下内容:
:set errorformat=\ %#%f(%l\\,%c):\ %m
:set makeprg=msbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true
回答by Simon Buchan
Copy from question to remove from 'unanswered' list
从问题复制以从“未答复”列表中删除
set errorformat=\ %#%f(%l\\,%c):\ %m
This will capture the output for both devenv /Buildand msbuild. However, msbuild has one catch. By default, it's output doesn't include full paths. To fix this you have to add the following line to your csproj file's main PropertyGroup:
这将捕获devenv /Buildmsbuild 和 msbuild的输出。但是,msbuild 有一个问题。默认情况下,它的输出不包括完整路径。要解决此问题,您必须将以下行添加到 csproj 文件的主 PropertyGroup:
<GenerateFullPaths>True</GenerateFullPaths>
回答by idbrii
I found an even better answer: use :compilerto use built-in efmsettings.
我找到了一个更好的答案:用于:compiler使用内置efm设置。
" Microsoft C#
compiler cs
" Microsoft Visual C++
compiler msvc
" mono
compiler mcs
" gcc
compiler gcc
Note: It also sets the default makeprg. See $VIMRUNTIME/compiler/
注意:它还设置了默认的makeprg. 见 $VIMRUNTIME/compiler/
回答by Tom Miller
As Simon Buchan mentioned you can use this in your project to generate the full paths in the output:
正如 Simon Buchan 提到的,您可以在项目中使用它来在输出中生成完整路径:
<GenerateFullPaths>True</GenerateFullPaths>
But you can make it more portable by adding /property:GenerateFullPaths=trueto you makeprginstead of adding the above to your project files.
但是您可以通过添加/property:GenerateFullPaths=true到您makeprg而不是将上述内容添加到您的项目文件中来使其更具便携性。
:set makeprg=msbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true\
回答by idbrii
I found this question when looking for errorformat for compiling c++ in Visual Studio. The above answers don't work for me (I'm not using MSBuild either).
我在寻找用于在 Visual Studio 中编译 c++ 的 errorformat 时发现了这个问题。以上答案对我不起作用(我也没有使用 MSBuild)。
I figured out this from this Vim Tipand :help errorformat:
我从这个 Vim Tip 中发现了这一点,并且:help errorformat:
" filename(line) : error|warning|fatal error C0000: message
set errorformat=\ %#%f(%l)\ :\ %#%t%[A-z]%#\ %[A-Z\ ]%#%n:\ %m
Which will give you a quickfix looking like this:
这将为您提供如下所示的快速修复:
stats.cpp|604 error 2039| 'getMedian' : is not a member of 'Stats'
(with error highlighted) from
(突出显示错误)来自
c:\p4\main\stats.cpp(604) : error C2039: 'getMedian' : is not a member of 'Stats'
回答by Jay Bazuzi
Try running msbuild instead of devenv. This will open up a ton of power in how the build runs.
尝试运行 msbuild 而不是 devenv。这将在构建运行方式方面发挥巨大作用。
Open a Visual Studio Command Prompt to get your path set up. Then do msbuild MySln.sln /Configuration:Debug.
打开 Visual Studio 命令提示符以设置您的路径。然后做msbuild MySln.sln /Configuration:Debug。
See msbuild /?for help.
查看msbuild /?帮助。
回答by manifest
None of these errorformats worked in Visual studio 2009 v9.0.21022.8 professional edition. Using cygwin, had to call devenv from bash which made setting makeprg a little tricky (screw batch files). Also had to tweak my errorformat when devenv splits into multiple processes and proceeds error message with "1>" or "2>" etc:
这些错误格式都不适用于 Visual Studio 2009 v9.0.21022.8 专业版。使用 cygwin,必须从 bash 调用 devenv,这使得设置 makeprg 有点棘手(拧批处理文件)。当 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.'"'
My .bashrc sets the MAKEPATH environment variable using cygpath to convert to a DOS compatible path:
我的 .bashrc 使用 cygpath 设置 MAKEPATH 环境变量以转换为 DOS 兼容路径:
export MAKEPATH="$(cygpath -d "proj/VC9/some.sln") /build \"Debug\""
If you have vim 6.x you can use :cwwhich is SO much better than clist (try searching for errors among hundreds of warnings and you know what I mean). Looking at vim tweaks makes me want to vomit but I'm in vim heaven!!! Good bye visual studio! Thanks for the base to tweak pydave +1.
如果你有 vim 6.x,你可以使用:cw这比 clist 好得多(尝试在数百个警告中搜索错误,你知道我的意思)。看着 vim 的调整让我想呕吐,但我在 vim 天堂!!!再见视觉工作室!感谢您调整 pydave +1 的基础。

