32 votes

Format d'erreur Vim pour Visual Studio

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>

21voto

Kevin Berridge Points 3313

J'ai un article de blog qui passe en revue tous les détails de la création de projets C # dans Vim, y compris le format d'erreur. Vous pouvez le trouver ici: http://kevin-berridge.blogspot.com/2008/09/vim-c-compiling.html

En bref, vous avez besoin des éléments suivants:

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

8voto

Simon Buchan Points 6245

Copier de la question à supprimer de la liste des réponses «sans réponse»

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

Cela capturera la sortie pour devenv /Build et msbuild. Cependant, msbuild a un hic. Par défaut, sa sortie n'inclut pas les chemins d'accès complets. Pour résoudre ce problème, vous devez ajouter la ligne suivante au PropertyGroup principal de votre fichier csproj:

 <GenerateFullPaths>True</GenerateFullPaths>
 

4voto

idbrise Points 4551

J'ai trouvé une réponse encore meilleure: utilisez :compiler pour utiliser les paramètres intégrés efm .

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

Remarque: Il définit également la valeur par défaut makeprg . Voir $ VIMRUNTIME / compiler /

1voto

Jay Bazuzi Points 20462

Essayez d'exécuter msbuild au lieu de devenv. Cela ouvrira une tonne de puissance dans le déroulement de la construction.

Ouvrez une invite de commande Visual Studio pour configurer votre chemin d'accès. Faites ensuite msbuild MySln.sln /Configuration:Debug .

Voir msbuild /? pour de l'aide.

1voto

idbrise Points 4551

J'ai trouvé cette question lors de la recherche pour errorformat pour la compilation c++ dans Visual Studio. Les réponses ci-dessus ne fonctionne pas pour moi (je ne suis pas à l'aide de MSBuild soit).

J'ai pensé à cette de cette Astuce Vim et :help errorformat:

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

Qui vous donnera un quickfix ressemblant à ceci:

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

(avec l'erreur en surbrillance) à partir de

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X