Frage

Ich mag Vims quickfix Funktionen mit der Ausgabe von Visual Studio devenv Build-Prozess oder msbuild verwenden.

Ich habe eine Batch-Datei erstellt genannt build.bat die die devenv wie diese bauen ausführt:

devenv MySln.sln /Build Debug

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

:set makeprg=build.bat

Wenn ich mich jetzt: machen, führt das Build erfolgreich, aber die Fehler werden nicht analysiert werden. Also, wenn ich laufe: cl oder: cn ich nur am Ende alle die Ausgabe von devenv Sehen / Build. Ich soll nur die Fehler sehen.

Ich habe eine Reihe von verschiedenen Einstellungen ausprobiert errorformat, die ich auf verschiedene Websites, um das Netz gefunden habe, aber keiner von ihnen hat die Fehler korrekt analysiert werden. Ist hier 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 versucht Vims Standard.

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.

die makeprg msbuild Verwendung wäre:

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

Eine 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 hier in der Tatsache liegt, dass der Pfad zur Datei CSPROJ relativ ist, nicht die SLN-Datei, die das aktuelle Verzeichnis in Vim und liegt ein Verzeichnis über der CSPROJ Datei.

ANTWORT: Habe ich es aus ...

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

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

<GenerateFullPaths>True</GenerateFullPaths>
War es hilfreich?

Lösung

Ich habe einen Blog-Post, die C # -Projekten Gebäude in Vim zu bekommen, einschließlich der Fehler-Format alle Details geht durch. 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

Andere Tipps

Kopieren Frage von 'offen' Liste zu entfernen

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

Dies wird erfaßt die Ausgabe für beide devenv /Build und msbuild. Allerdings msbuild hat einen Haken. Standardmäßig enthält sie die Ausgabe nicht die vollen Pfade. Um dies zu beheben Sie die folgende Zeile in der Datei csproj Hauptproperty hinzufügen:

<GenerateFullPaths>True</GenerateFullPaths>

fand ich eine noch bessere Antwort: Verwenden Sie :compiler eingebaute in efm Einstellungen zu verwenden

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

Hinweis: Es legt auch den Standard makeprg. Siehe $ VIMRUNTIME / Compiler /

Versuchen msbuild statt devenv läuft. Dies wird eine Tonne Macht in öffnen, wie der Build ausgeführt wird.

öffnen Sie eine Visual Studio-Eingabeaufforderung Ihren Weg nach oben gesetzt werden. Dann tun msbuild MySln.sln /Configuration:Debug.

Siehe msbuild /? um Hilfe.

Ich fand diese Frage, wenn für errorformat für die Erstellung von c ++ in Visual Studio suchen. Die oben genannten Antworten für mich nicht funktionieren (ich verwende MSBuild auch nicht).

ich herausgefunden das von dieser Vim Tipp und :help errorformat:

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

, die Ihnen eine quickfix wie folgt aussehen:

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

(mit Fehlern markiert) von

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

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

<GenerateFullPaths>True</GenerateFullPaths>

Aber man kann es mehr tragbar macht durch Zugabe von /property:GenerateFullPaths=true Sie makeprg stattdessen die oben Projektdateien hinzuzufügen.

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

Keine dieser errorformats arbeitete in Visual Studio 2009 Professional Edition v9.0.21022.8. Mit Cygwin, hatte von bash zu nennen devenv, die ein wenig schwierig (Schraube Batch-Dateien) Einstellung makeprg gemacht. Auch hatte mein errorformat zwicken, wenn devenv spaltet sich in mehrere Prozesse und fährt Fehlermeldung 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 den MakePath Umgebungsvariable cygpath zu einem DOS-kompatibelen Pfad konvertieren mit:

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

Wenn Sie vim 6.x haben, können Sie verwenden, : cw , die so viel besser als clist (versuchen auf Fehler unter Hunderten von Warnungen suchen und Sie wissen, was ich meine). bei vim zwickt Blick macht ich will, aber ich bin in vim Himmel erbrechen !!! Auf Wiedersehen Visual Studio! Vielen Dank für die Basis zwicken pydave +1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top