Pregunta

Quiero usar Vim quickfix características con la salida de Visual Studio devenv proceso de construcción o de msbuild.

He creado un archivo por lotes llamado a construir.bat que ejecuta el devenv generación como esta:

devenv MySln.sln /Build Debug

En vim he señalado :comando make para que el archivo de proceso por lotes:

:set makeprg=build.bat

Cuando yo ejecute ahora :hacer, la construcción se ejecuta con éxito, sin embargo los errores de no conseguir que se analiza.Así que si ejecuto :cl o :cn acabo de terminar de ver toda la salida de devenv /Construir.Tengo de ver sólo los errores.

Yo he probado un número de diferentes errorformat la configuración que he encontrado en varios sitios alrededor de la red, pero ninguno de ellos ha analizado los errores correctamente.He aquí algunas que he probado:

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

Y, por supuesto, he tratado de Vim predeterminado.

Aquí un ejemplo de la salida de la compilación.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 ==========

ACTUALIZACIÓN: Parece que el uso de msbuild en lugar de devenv es probablemente el camino a seguir (como por Jay comentario).

El uso de msbuild la makeprg sería:

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

Ejemplo de salida debe ser:

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

Parece que la parte difícil aquí puede residir en el hecho de que la ruta es relativa a la .archivo csproj, no el .archivo sln que es el directorio actual en Vim y se encuentra en un directorio por encima de el .archivo csproj.

RESPUESTA: Me lo imaginé...

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

Esto va a capturar la salida de ambos devenv /Construir y de msbuild.Sin embargo, msbuild tiene un problema.Por defecto, la salida no se incluyen las rutas completas.Para solucionar esto tenemos que añadir la siguiente línea a su archivo csproj principal de PropertyGroup:

<GenerateFullPaths>True</GenerateFullPaths>
¿Fue útil?

Solución

Tengo un blog que repasa todos los detalles de llegar C# de proyectos de construcción en Vim, incluyendo el formato de error.Usted puede encontrar aquí: http://kevin-berridge.blogspot.com/2008/09/vim-c-compiling.html

En breve tendrá las siguientes:

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

Otros consejos

Copia de la pregunta a quitar de 'sin respuesta' lista

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

De esta forma podrá capturar la salida para ambos devenv /Build y de msbuild.Sin embargo, msbuild tiene un problema.Por defecto, la salida no se incluyen las rutas completas.Para solucionar esto tenemos que añadir la siguiente línea a su archivo csproj principal de PropertyGroup:

<GenerateFullPaths>True</GenerateFullPaths>

He encontrado una mejor respuesta:uso :compiler para el uso integrado en efm los ajustes.

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

Nota:También se establece el valor predeterminado makeprg.Ver $VIMRUNTIME/compilador/

Intente ejecutar de msbuild en lugar de devenv.Esto abrirá una tonelada de poder en la forma de la construcción se ejecuta.

Abra un Símbolo del sistema de Visual Studio para obtener su camino establecido.A continuación, hacer msbuild MySln.sln /Configuration:Debug.

Ver msbuild /? para obtener ayuda.

He encontrado esta pregunta cuando se busca errorformat para compilar c++ en Visual Studio.Las respuestas anteriores no funcionan para mí (yo no uso MSBuild bien).

Me di cuenta de esto de este Vim Punta y :help errorformat:

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

Que le dará un quickfix de esta apariencia:

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

(con error resaltado) de

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

Como Simon Buchan mencionado usted puede utilizar esto en su proyecto para generar las rutas de acceso completas en la salida:

<GenerateFullPaths>True</GenerateFullPaths>

Pero usted puede hacer que sea más portátil mediante la adición de /property:GenerateFullPaths=true para usted makeprg en lugar de añadir el de arriba para los archivos de proyecto.

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

Ninguno de estos errorformats trabajado en Visual studio 2009 v9.0.21022.8 professional edition.Usando cygwin, tuvo que llamar a devenv de bash que hizo configuración makeprg un poco complicado (tornillo de archivos de proceso por lotes).También tuvo que modificar mi errorformat cuando devenv se divide en múltiples procesos y procede mensaje de error con "1>" o "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.'"'

Mi .bashrc establece el MAKEPATH variable de entorno mediante cygpath convertir en un DOS compatible ruta:

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

Si usted tiene vim 6.x se puede utilizar :cw que es mucho mejor que clist (trate de buscar los errores de entre cientos de advertencias y usted sabe a qué me refiero).Mirando vim ajustes me dan ganas de vomitar, pero estoy en vim cielo!!!Adiós visual studio!Gracias por la base para ajustar pydave +1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top