class & function names highlighting in Vim

前端 未结 11 687
名媛妹妹
名媛妹妹 2020-11-29 15:23

I just recently set up my Vim environment from Textmate, after becoming addicted to its modal input.

However, syntax highlighting seems to be not so beautiful in Vim

相关标签:
11条回答
  • 2020-11-29 16:09

    this is my first post here and i didn't know how to make an observation, the answer of Eduardo makes "(" and "{" look unmached and bugs syntax foldind, I changed it a little to fix this.

    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
    
    0 讨论(0)
  • 2020-11-29 16:11

    I really recommend you the taghighlight plugin, click here for it's website.

    0 讨论(0)
  • 2020-11-29 16:12

    Interestingly, the syntax highlighters in VIM don't support applying a syntax to identifiers or function names - at least not the syntax highlighters for C and C++. So, even if you do:

    :hi Function guifg=red
    

    or

    :hi Identifier guifg=red
    

    it doesn't give these a color. I just seems to be not much more than keywords and constants for these languages.

    Here, someone has started extending the cpp syntax file to support method names. It's a start I guess. http://vim.wikia.com/wiki/Highlighting_of_method_names_in_the_definition

    0 讨论(0)
  • 2020-11-29 16:20

    I had this very same problem when I started using vim. The solution is simple, you just have to edit the c syntax file used by vim, here's how to do it:

    When you start editing a C or C++ file, vim reads the default c syntax file located in

    $VIMRUNTIME/syntax/c.vim
    

    (Where $VIMRUNTIME is where you have vim installed. You can find out it's default value by opening vim and using the command ":echo $VIMRUNTIME").

    You can simply overwrite that file, or you can create your custom C syntax file (which will be loaded by vim instead of the default one) in this location:

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

    (I have never used a Mac so I dunno which one will work for you. You can find out more in the vim help, ":help vimfiles")

    Now the fun part. Copy the default "$VIMRUNTIME/syntax/c.vim" file to your vimfiles directory ("$HOME/.vim/syntax/c.vim" for UNIX), and edit it by adding these lines:

    " 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
    

    That's it! Now functions and class names will be highlighted with the color defined in the "Function" highlight (":hi Function"). If you want to customize colors, you can change the last two lines above to something like this:

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

    or you can leave the C syntax file alone and define colors in your vimrc file (":help vimrc"):

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

    (Note the absence of the "def" keyword, go to ":help highlight-default" for details). For the available parameters to the ":hi" command see ":help :highlight".

    You can find the complete c.vim file for Vim 7.2 on this link (Note: only use this if you have a non-modified Vim, version 7.2):

    http://pastebin.com/f33aeab77

    And the obligatory screenshot:

    0 讨论(0)
  • 2020-11-29 16:20

    Sergey, changing the first line from

    syn match    cCustomParen    "(" contains=cParen,cCppParen
    

    to

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

    seems to fix it for me.

    0 讨论(0)
提交回复
热议问题