سؤال

أريد أن استخدام Vim هو quickfix الميزات مع الإخراج من Visual Studio devenv بناء العملية أو msbuild.

لقد قمت بإنشاء ملف دفعي يسمى بناء.الخفافيش التي ينفذ devenv بناء مثل هذا:

devenv MySln.sln /Build Debug

في همة لقد أشار :جعل الأمر إلى أن الملف الدفعي:

:set makeprg=build.bat

عندما كنت الآن تشغيل :جعل ، بناء ينفذ بنجاح, لكن الأخطاء لا تحصل على تحليل.لذلك إذا كنت تعمل :cl أو :cn لقد شاهدت جميع الإخراج من devenv /بناء.لا ينبغي أن يرى إلا الأخطاء.

لقد حاولت عدد من مختلف errorformat الإعدادات التي وجدت في مواقع مختلفة في جميع أنحاء الشبكة ، ولكن أيا منهم تحليل الأخطاء بشكل صحيح.وهنا عدد قليل حاولت:

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

وبالطبع حاولت همة الافتراضي.

وهنا بعض الأمثلة على الإخراج من بناء.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 ==========

تحديث: يبدو باستخدام msbuild بدلا من devenv ربما هو الطريق الصحيح للذهاب (حسب جاي تعليق).

باستخدام msbuild على makeprg ليكون:

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

إخراج نموذج وينبغي أن تكون:

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

يبدو أن الجزء صعبة هنا قد تكمن في حقيقة أن المسار النسبي .الملف csproj, لا .sln الملف الذي هو الدليل الحالي في همة يكمن دليل واحد فوق .الملف csproj.

الجواب: فهمت

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

هذا سوف التقاط الإخراج لكل من devenv /بناء msbuild.ومع ذلك ، msbuild واحد الصيد.افتراضيا ، يتم إخراج لا تشمل المسارات الكاملة.لإصلاح هذا يجب إضافة السطر التالي إلى الملف csproj الرئيسية PropertyGroup:

<GenerateFullPaths>True</GenerateFullPaths>
هل كانت مفيدة؟

المحلول

لدي بلوق وظيفة التي يمشي من خلال كل التفاصيل من الحصول على C# مشاريع بناء في همة ، بما في ذلك الخطأ الشكل.يمكنك العثور عليها هنا: http://kevin-berridge.blogspot.com/2008/09/vim-c-compiling.html

باختصار تحتاج إلى ما يلي:

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

نصائح أخرى

نسخة من السؤال لإزالة من دون إجابة قائمة

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

هذا سوف التقاط الإخراج لكل من devenv /Build و msbuild.ومع ذلك ، msbuild واحد الصيد.افتراضيا ، يتم إخراج لا تشمل المسارات الكاملة.لإصلاح هذا يجب إضافة السطر التالي إلى الملف csproj الرئيسية PropertyGroup:

<GenerateFullPaths>True</GenerateFullPaths>

لقد وجدت أفضل إجابة:استخدام :compiler استخدام المدمج في efm الإعدادات.

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

ملاحظة:كما يحدد الافتراضي makeprg.انظر $VIMRUNTIME/مترجم/

حاول تشغيل msbuild بدلا من devenv.هذا وسوف تفتح طن من الطاقة في كيفية بناء يعمل.

فتح موجه الأوامر Visual Studio للحصول على المسار الخاص بك اقامة.ثم القيام msbuild MySln.sln /Configuration:Debug.

انظر msbuild /? للحصول على مساعدة.

لقد وجدت هذا السؤال عندما تبحث عن errorformat تجميع c++ Visual Studio.الإجابات أعلاه لا تعمل بالنسبة لي (أنا لا تستخدم MSBuild إما).

أنا أحسب هذا من هذه همة نصيحة و :help errorformat:

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

والتي سوف تعطيك quickfix تبدو مثل هذا:

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

(مع خطأ الضوء) من

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

كما سيمون بوكان المذكورة يمكنك استخدام هذا المشروع إلى إنشاء مسارات الكاملة في الإخراج:

<GenerateFullPaths>True</GenerateFullPaths>

ولكن يمكنك جعلها أكثر المحمولة من خلال إضافة /property:GenerateFullPaths=true لك makeprg بدلا من إضافة المذكورة أعلاه إلى ملفات المشروع الخاص بك.

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

أيا من هذه errorformats عملت في Visual studio 2009 v9.0.21022.8 professional edition.باستخدام cygwin, كان الاتصال devenv من باش مما جعل وضع makeprg صعبة قليلا (المسمار الملفات الدفعية).كما أن قرص بلدي errorformat عندما devenv يقسم إلى عدة عمليات العائدات ظهور رسالة خطأ "1>" أو "2>" إلخ:

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.'"'

بلدي .bashrc يحدد MAKEPATH متغير البيئة باستخدام cygpath لتحويل دوس متوافق المسار:

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

إذا كان لديك همة 6.× يمكنك استخدام :cw والذي هو أفضل بكثير من clist (حاول البحث عن الأخطاء من بين المئات من تحذيرات وأنت تعرف ما أعني).تبحث في همة القرص يجعلني تريد القيء ولكن أنا في همة السماء!!!وداعا visual studio!شكرا على قاعدة أن يعدل pydave +1.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top