2008-09-19 19 views
29

Ich möchte Vim Quickfix Features mit der Ausgabe von Visual Studio devenv Build-Prozess oder Msbuild verwenden.Vim Fehlerformat für Visual Studio

ich eine Batch-Datei erstellt haben genannt build.bat dem die devenv wie diese bauen ausführt:

devenv MySln.sln /Build Debug 

In vim ich darauf habe die: Befehl zu dieser Batch-Datei:

:set makeprg=build.bat 

Wenn ich jetzt: make ausführen, wird der Build erfolgreich ausgeführt, die Fehler werden jedoch nicht analysiert. Wenn ich also: cl oder: cn benutze, sehe ich nur die Ausgabe von devenv/Build. Ich sollte nur die Fehler sehen.

Ich habe versucht, eine Reihe von verschiedenen Fehlerformateinstellungen, die ich auf verschiedenen Seiten im Netz gefunden habe, aber keiner von ihnen hat die Fehler richtig analysiert. Hier sind ein paar, die ich versucht habe:

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 

Und natürlich habe ich Vims Standard versucht.

Hier ist ein Beispiel einer Ausgabe aus dem 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: Es sieht aus wie msbuild statt devenv verwendet, ist wahrscheinlich der richtige Weg (per Jay Kommentar) zu gehen.

Mit msbuild der makeprg wäre:

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

Beispielausgabe whould sein:

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?) 

Es sieht aus wie der schwierige Teil in der Tatsache liegen hier, dass der Pfad zu der relativ ist. csproj-Datei, nicht die .sln-Datei, die das aktuelle Verzeichnis in Vim ist und ein Verzeichnis über der .csproj-Datei liegt.

ANTWORT: ich es herausgefunden ...

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

Das wird die Ausgabe für beide devenv/Build und msbuild erfassen. Allerdings hat Msbuild einen Haken. Standardmäßig enthält die Ausgabe keine vollständigen Pfade. Um dies zu beheben Sie die folgende Zeile in der Datei csproj Hauptproperty hinzufügen:

<GenerateFullPaths>True</GenerateFullPaths> 
+0

Für diejenigen von uns nicht VS2k8 verwenden, einige Fehlerausgabe nützlich sein würde. – Zathrus

Antwort

17

Ich habe einen Blogbeitrag, der durch alle Details des Erstellens von C# -Projekten in Vim geht, einschließlich des Fehlerformats.Sie können es hier finden: http://kevin-berridge.blogspot.com/2008/09/vim-c-compiling.html

Kurz gesagt müssen Sie Folgendes:

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

Dies funktioniert auch gut für .net-Core, d. H .: 'dotnet build'. – lbergnehr

+0

Diese Einstellungen plus [vim-dimpatch] (https://github.com/tpope/vim-dispatch) funktionieren großartig. – Seth

1

Versuchen msbuild statt devenv läuft. Dies wird eine Menge Leistung in der Ausführung des Builds eröffnen.

Öffnen Sie eine Visual Studio-Eingabeaufforderung, um Ihren Pfad einzurichten. Dann tun Sie msbuild MySln.sln /Configuration:Debug.

Siehe msbuild /? für Hilfe.

7

Kopieren Frage von ‚offen‘ Liste

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

Dies erfassen sowohl devenv /Build und msbuild die Ausgabe zu entfernen. Msbuild hat jedoch einen Haken. Standardmäßig enthält die Ausgabe keine vollständigen Pfade. Um dies zu beheben Sie die folgende Zeile in der Datei csproj Hauptproperty hinzufügen:

<GenerateFullPaths>True</GenerateFullPaths> 
1

ich diese Frage gefunden, wenn für errorformat für die Erstellung von C++ in Visual Studio suchen. Die obigen Antworten funktionieren nicht für mich (ich benutze auch nicht MSBuild).

habe ich herausgefunden das von this Vim Tip und :help errorformat:

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

dem Sie eine quickfix wie folgt aussehen geben:

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

(mit Fehler markiert) von

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

Frustrierend konnte ich leicht Syntax für gcc, jikes und javac [in einigen zufälligen vimrc] [1] finden. Ah, gut. Oblivion ist das Schicksal von uns armen VS C++ - Programmierer. [1]: http://www.fleiner.com/vim/syntax/myvimrc – idbrii

3

Ich habe eine noch bessere Antwort gefunden: Verwenden Sie :compiler um gebaut zu verwenden -in efm Einstellungen.

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

Hinweis: Es wird auch der Standardwert makeprg festgelegt. Siehe $ VIMRUNTIME/compiler/

0

Keiner dieser Fehlerformate funktionierte in Visual Studio 2009 v9.0.21022.8 Professional Edition. Mit cygwin musste devenv von bash aus aufgerufen werden, was das Setzen von makeprg ein wenig schwierig machte (Batch-Dateien). Auch hatte mein errorformat zwicken, wenn devenv mehrere Prozesse und fährt Fehlermeldung teilt sich in mit „1>“ oder „2>“ etc:

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.'"' 

Meine Bashrc setzt die MakePath Umgebungsvariable cygpath zu einem DOS konvertieren kompatibel Pfad:

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

Wenn Sie vim 6.x Sie :cw verwenden können, die so viel besser ist als clist (versuchen auf Fehler unter Hunderten von Warnungen suchen und Sie wissen, was ich meine). Wenn ich auf vim zwicken schaue, möchte ich mich übergeben, aber ich bin in vim heaven !!! Auf Wiedersehen Visual Studio! Danke für die Basis, um pydave +1 zu optimieren.

1

Als Simon Buchan erwähnten Sie dies in Ihrem Projekt verwenden können die vollständigen Pfade in der Ausgabe zu erzeugen:

<GenerateFullPaths>True</GenerateFullPaths> 

Aber man kann es tragbar durch Zugabe von /property:GenerateFullPaths=true Ihnen mehr machen makeprg stattdessen die oben das Hinzufügen Ihre Projektdateien.