سؤال

لقد أقامت مؤخرا بيئة VIM الخاصة بي من زميله، بعد أن أصبح مدمنا على مدخلاتها المشرف.

ومع ذلك، يبدو أن تسليط الضوء على بناء الجملة ليست جميلة جدا في VIM. أنا رمز في C ++ وبينما لا يمكن تمييز أسماء المكالمة والفئات، من الصعب قراءة التعليمات البرمجية. لقد لعبت مع مخطط الألوان قليلا، لكن لم أتمكن من العثور على أي مجال يتوافق مع "اسم الفصل" أو "اسم الدالة".

في الصورة أدناه، لاحظ كيف DroughtLayer:: و *.size() لا يتم تسليط الضوء على اليمين في ماكفيم.

Picture comparison between Textmate(left) and Vim(right)
(مصدر: Ivzhao.com.)

هل توجد أية أفكار لحل هذا؟ إنه يزعجني حقا لأنني رجل حساس بالبصرية.

هل كانت مفيدة؟

المحلول

ومن المثير للاهتمام، من المثير للاهتمام، لا يدعم مقلق بناء الجملة في VIM تطبيق بناء جملة للحصول على معرفات أو أسماء الوظائف - على الأقل ليس معايير بناء الجملة ل C و C ++. حتى لو كنت تفعل:

:hi Function guifg=red

أو

:hi Identifier guifg=red

لا يعطي هذه اللون. يبدو أنني ليس أكثر من الكلمات الرئيسية والثوابت لهذه اللغات.

هنا، بدأ شخص ما تمديد ملف بناء الجملة CPP لدعم أسماء الأسلوب. انها بداية أعتقد.http://vim.wikia.com/wiki/highlighting_of_method_names_in_the_definition.

نصائح أخرى

كان لدي هذه المشكلة نفسها عندما بدأت في استخدام VIM. الحل بسيط، عليك فقط تحرير ملف بناء الجملة C المستخدمة بواسطة VIM، إليك كيفية القيام بذلك:

عند بدء تشغيل ملف C / C ++، يقرأ VIM ملف بناء الجملة الافتراضي الموجود في

$VIMRUNTIME/syntax/c.vim

(حيث يتم تثبيت VIMRuntime حيث لديك VIM. يمكنك معرفة القيمة الافتراضية من خلال فتح VIM واستخدام الأمر ": Echo $ vimruntime").

يمكنك ببساطة الكتابة فوق هذا الملف، أو يمكنك إنشاء ملف بناء جملة مخصص C (الذي سيتم تحميله بواسطة VIM بدلا من الإعداد الافتراضي) في هذا الموقع:

$HOME/.vim/syntax/c.vim      (for UNIX)
$HOME/vimfiles/syntax/c.vim  (for PC or OS/2)

(لم أستخدم ماك ماك لذلك أنا لا أعمل من أجلك. يمكنك معرفة المزيد في مساعدة VIM ": مساعدة Vimfiles":

الآن الجزء المرح. انسخ الملف الافتراضي "$ vimruntime / syntax / syntax / c.vim" إلى دليل vimfiles الخاص بك ("$ home / .vim / syntax / c.vim" ل UNIX)، وتعديله عن طريق إضافة هذه الخطوط:

" Highlight Class and Function names
syn match    cCustomParen    "(" contains=cParen,cCppParen
syn match    cCustomFunc     "\w\+\s*(" contains=cCustomParen
syn match    cCustomScope    "::"
syn match    cCustomClass    "\w\+\s*::" contains=cCustomScope

hi def link cCustomFunc  Function
hi def link cCustomClass Function

هذا هو! سيتم تسليط الضوء على الوظائف والأسماء الفئة مع اللون المعرف في تسليط الضوء على "الوظيفة" (": مرحبا وظيفة"). إذا كنت ترغب في تخصيص الألوان، فيمكنك تغيير آخر سطرين أعلاه إلى شيء مثل هذا:

hi def cCustomFunc  gui=bold guifg=yellowgreen
hi def cCustomClass gui=reverse guifg=#00FF00

أو يمكنك ترك ملف بناء الجملة C وحده وتحديد الألوان في ملف Vimrc الخاص بك (": Help Vimrc"):

hi cCustomFunc  gui=bold guifg=yellowgreen
hi cCustomClass gui=reverse guifg=#00FF00

(لاحظ عدم وجود كلمة "Def"، انتقل إلى ": مساعدة تسليط الضوء على الافتراضي" للحصول على التفاصيل). بالنسبة للمعلمات المتوفرة إلى ": مرحبا" See ": Help: تسليط الضوء على".

يمكنك العثور على ملف C.VIM الكامل ل VIM 7.2 على هذا الرابط (ملاحظة: استخدم هذا فقط إذا كان لديك Vim غير تعديل، الإصدار 7.2):

http://pastebin.com/f33aeab77.

وقطة جلطة إلزامية:

enter image description here

هذا هو أول مشاركتي هنا وأنا لم أكن أعرف كيفية إجراء ملاحظة، إجابة Eduardo يجعل "(و" ("و" {"تبدو صياغة بناء جملة غير مرغوب فيها وخلل، لقد غيرت ذلك قليلا لإصلاح هذا.

syn match    cCustomParen    "?=(" contains=cParen,cCppParen
syn match    cCustomFunc     "\w\+\s*(\@=" contains=cCustomParen
syn match    cCustomScope    "::"
syn match    cCustomClass    "\w\+\s*::" contains=cCustomScope
hi def cCustomFunc  gui=bold guifg=yellowgreen
hi def link cCustomClass Function

الحل الوحيد هو استخدام قاعدة بيانات CTags بنيت. لذلك إنشاء واحد مع ctags. جدوى. ثم قم بتعيين متغير العلامات ووضع ما يلي

~/.vim/after/syntax/c.vim

function! s:highlight()
    let list = taglist('.*')

    for item in list
        let kind = item.kind

        if kind == 'f' || kind == 'c'
            let name = item.name
            exec 'syntax keyword Identifier '.name
        endif
    endfor
endfunction

call s:highlight()

يجب أن أحذرك من أن هذا يمكن أن يعمل بطيئا جدا في قاعدة بيانات CTags الكبيرة للغاية.

أيضا هناك حل واحد على vim.org لكنني لم أحاول هذا واحد. دعني اعلم ان كانت تعمل ل.

تحرير: قد يكون color_coded ثقيلا جدا بالنسبة لك. يحاول اوكتول / VIM-CPP-heightlight. وبعد وهو يدعم C ++ 11/14 ويدمج ما @ reduardo الإجابات.

متعلق بدلالات الألفاظ مقرها
أوصي jeaye / color_coded، البرنامج المساعد VIM لتسليط الضوء على libclang
آسف جدا لأنني جديد في Stackoverflow مما يعني أنني لا أسمع كاف لنشر الصور. اذهب لرؤية آثارها إذا كنت تريد أن تعطيها لقطة. :)

الايجابيات:

  • سهلة التركيب
  • تسليط الضوء الدلالي
  • تخفيف المذكورة على النحو الوارد أعلاه، تحتاج إلى vim جمعت python2.7وبعد ومع ذلك، يتم كتابة color_coded في C ++ ويوفر Lua Binding -> C ++.

سلبيات:

  • إنها تؤخر إلا إذا قمت بإجراء بعض الأحداث VIM للحكومة.
  • التخصيص أصعب بعض الشيء؛ تحتاج إلى تحرير بناء الجملة / color_coded.vim بنفسك. لكن التخصيص قد وضعت على خارطة الطريق.

على الرغم من أنه لا يزال قيد التطوير، إلا أنه يكتسب الاهتمام بشكل متزايد.

before after

سيرجي، تغيير الخط الأول من

syn match    cCustomParen    "(" contains=cParen,cCppParen

ل

syn match    cCustomParen    "(" contains=cParen contains=cCppParen

يبدو أن إصلاحه بالنسبة لي.

استخدام المكون الإضافي ل vim مثل قائمة العلامات أو إعداد ctags أو cscope التكامل مع VIM (هنا برنامج تعليمي لخدمة VIM / CSCOPE.)

حاول استخدام هذا البرنامج المساعد http://www.vim.org/scripts/script.php؟script_id=2646.لها كل ctags تسليط الضوء بك بكفاءة جدا

أنا حقا أوصي لك taghighlight البرنامج المساعد، انقر. هنا لأنه موقع الويب.

ال Clighter يمكن أيضا النظر في البرنامج المساعد، وهو

plugin for c-family semantic source code highlighting, based on Clang

ومع ذلك، يتطلب الإصدارات والبرامج الأخيرة إلى حد ما: vim 7.4.330 +python2 و libclang.

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