Je veux utiliser Vim est quickfix fonctionnalités avec la sortie de Visual Studio devenv processus de construction ou de msbuild.
J'ai créé un fichier batch appelé à construire.chauve-souris, qui exécute les devenv accumulation de ce genre:
devenv MySln.sln /Build Debug
Dans vim, j'ai relevé le :commande make pour que le fichier de commandes:
:set makeprg=build.bat
Lorsque j'ai maintenant exécuter :la marque, la compilation s'exécute avec succès, cependant, les erreurs n'obtenez pas analysé. Donc, si je run :ou cl :cn je viens de finir de voir la sortie de devenv /Build. Je devrais voir uniquement les erreurs.
J'ai essayé un certain nombre de différents errorformat paramètres que j'ai trouvé sur différents sites sur le net, mais aucun d'entre eux ont analysé les erreurs correctement. Voici quelques-uns que j'ai essayé:
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
Et bien sûr, j'ai essayé de Vim par défaut.
Voici un exemple de sortie de la compilation.chauve-souris:
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 ==========
Mise à JOUR: Il ressemble à l'aide de msbuild au lieu de devenv est probablement la bonne façon de faire (comme par Jay commentaire).
À l'aide de msbuild la makeprg serait:
:set makeprg=msbuild\ /nologo\ /v:q
Exemple de sortie doit être:
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?)
Il ressemble à la partie la plus délicate ici réside peut-être dans le fait que le chemin est relatif à l' .csproj fichier, pas le .la sln fichier qui est le répertoire courant dans Vim et se trouve un répertoire au-dessus de la .fichier csproj.
RÉPONSE: J'ai pensé à elle...
set errorformat=\ %#%f(%l\\\,%c):\ %m
Cela permettra de capturer la sortie pour les deux devenv /Construire et msbuild. Cependant, msbuild a un hic. Par défaut, elle est de sortie n'inclut pas les chemins d'accès complets. Pour corriger cela, vous devez ajouter la ligne suivante à votre fichier csproj principale de PropertyGroup:
<GenerateFullPaths>True</GenerateFullPaths>