Question

Je souhaite utiliser les fonctionnalités de correction rapide de Vim avec la sortie du processus de construction devenv de Visual Studio ou de msbuild.

J'ai créé un fichier de commandes appelé build.bat qui exécute la compilation devenv comme suit:

devenv MySln.sln /Build Debug

Dans vim, j'ai indiqué la commande: make à ce fichier de commandes:

:set makeprg=build.bat

Quand je lance maintenant: make, la construction s'exécute correctement, mais les erreurs ne sont pas analysées. Donc, si je lance: cl ou: cn, je finis par voir tout le résultat de devenv / Build. Je ne devrais voir que les erreurs.

J'ai essayé différents paramètres d'erreur de format que j'ai trouvés sur différents sites du réseau, mais aucun d'entre eux n'a correctement analysé les erreurs. En voici quelques-unes que j'ai essayées:

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é le défaut de Vim.

Voici un exemple de sortie du 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 ==========

MISE À JOUR: Il semble que l'utilisation de msbuild au lieu de devenv soit probablement la bonne solution (selon le commentaire de Jay).

En utilisant msbuild, le makeprg serait:

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

La sortie d'échantillon devrait ê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 semble que la partie délicate de ce problème réside peut-être dans le fait que le chemin est relatif au fichier .csproj, et non au fichier .sln qui est le répertoire en cours dans Vim et se trouve un répertoire au-dessus du fichier .csproj.

RÉPONSE: Je l'ai compris ...

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

Ceci capturera la sortie pour devenv / Build et msbuild. Cependant, msbuild a un problème. 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 groupe de propriétés principal de votre fichier csproj:

<GenerateFullPaths>True</GenerateFullPaths>
Était-ce utile?

La solution

J'ai un article de blog qui passe en revue tous les détails de la construction 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

Autres conseils

Copier de la question à supprimer de la liste "sans réponse"

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

Ceci capturera la sortie pour devenv / Build et msbuild. Cependant, msbuild a un problème. 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 groupe de propriétés principal de votre fichier csproj:

<GenerateFullPaths>True</GenerateFullPaths>

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

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

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

Essayez d’exécuter msbuild au lieu de devenv. Cela ouvrira une tonne de puissance dans la façon dont la compilation fonctionne.

Ouvrez une invite de commande Visual Studio pour configurer votre chemin. Ensuite, faites msbuild MySln.sln / Configuration: Debug .

Voir msbuild /? pour obtenir de l'aide.

J'ai trouvé cette question lors de la recherche de errorformat pour la compilation de c ++ dans Visual Studio. Les réponses ci-dessus ne fonctionnent pas pour moi (je n'utilise pas MSBuild non plus).

J'ai découvert cela grâce à ce conseil Vim et : help errorformat :

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

Ce qui vous donnera un correctif ressemblant à ceci:

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

(avec erreur en surbrillance) de

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

Comme Simon Buchan l’a mentionné, vous pouvez utiliser cela dans votre projet pour générer les chemins complets dans la sortie:

<GenerateFullPaths>True</GenerateFullPaths>

Mais vous pouvez le rendre plus portable en ajoutant / property: GenerateFullPaths = true à makeprg au lieu de l'ajouter à vos fichiers de projet.

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

Aucun de ces formats d'erreur n'a fonctionné dans l'édition professionnelle de Visual studio 2009 v9.0.21022.8. En utilisant cygwin, il a fallu appeler devenv depuis bash, ce qui rendait le réglage de makeprg un peu délicat (viser des fichiers batch). Je devais également modifier mon format d'erreur lorsque devenv se scinde en plusieurs processus et produisit le message d'erreur avec " 1 > " ou " 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.'"'

Mon .bashrc définit la variable d'environnement MAKEPATH à l'aide de cygpath pour convertir en un chemin compatible DOS:

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

Si vous avez vim 6.x, vous pouvez utiliser : cw , ce qui est vraiment beaucoup mieux que clist (essayez de rechercher des erreurs parmi des centaines d’avertissements et vous voyez ce que je veux dire). Regarder vim tweaks me donne envie de vomir mais je suis au paradis vim !!! Au revoir studio visuel! Merci pour la base pour modifier pydave +1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top