76 votes

noms de classe et de fonction surlignés dans Vim

Je viens de configurer mon Vim environnement de Textmate, après être devenu accro à son modale d'entrée.

Cependant, la coloration syntaxique ne semble pas être si belle dans Vim. Je code en C++ et depuis l'appel de la fonction et les noms de classe ne peut pas être mis en évidence, le code est plus difficile à lire. J'ai joué avec un jeu de couleurs pour un peu, mais ne pouvait pas trouver un terrain qui correspondait à la "classe nom" ou "nom de la fonction".

Dans l'image ci-dessous, remarquez comment DroughtLayer:: et *.size() n'est pas mis en évidence sur la droite dans MacVim.

Picture comparison between Textmate(left) and Vim(right)

Toute idée comment résoudre ce problème? Il me gêne vraiment comme je le suis d'autant visuelle-garçon sensible.

Merci!

136voto

Eduardo Points 801

J'ai eu ce même problème quand j'ai commencé à l'aide de vim. La solution est simple, vous avez juste à modifier la syntaxe du c de fichier utilisé par vim, voici comment faire:

Lorsque vous commencez à éditer un C ou C++ fichier, vim lit la valeur par défaut de la syntaxe c fichier situé dans

$VIMRUNTIME/syntax/c.vim

(Où $VIMRUNTIME est l'endroit où vous avez vim installé. Vous pouvez trouver qu'il est valeur par défaut à l'ouverture de vim et de l'aide de la commande ":echo $VIMRUNTIME").

Vous pouvez simplement écraser ce fichier, ou vous pouvez créer votre propre C de la syntaxe du fichier (qui sera chargé par vim à la place de celui par défaut) à cet endroit:

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

(Je n'ai jamais utilisé un Mac donc je ne sais pas qui on va travailler pour vous. Vous pouvez trouver plus d'informations dans le vim de l'aide ":aider vimfiles")

Maintenant la partie amusante. Copie par défaut "$VIMRUNTIME/syntaxe/c.vim" fichier de votre vimfiles répertoire ("$HOME/.vim/syntax/c.vim" pour UNIX), et de le modifier en ajoutant ces lignes:

" 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

Ça y est! Maintenant, les fonctions et les noms de classe sera mis en évidence avec la couleur définie dans la "Fonction" mettre l'accent":hi Fonction"). Si vous souhaitez personnaliser les couleurs, vous pouvez modifier les deux dernières lignes ci-dessus à quelque chose comme ceci:

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

ou vous pouvez laisser la syntaxe du C fichier seul et de définir les couleurs dans votre fichier vimrc (":aider vimrc"):

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

(Notez l'absence de la "def" mot-clé, allez dans ":aider à mettre en évidence-par défaut" pour plus de détails). Pour les paramètres disponibles pour l' ":salut de la commande" voir ":help :mettre en surbrillance".

Vous pouvez trouver le c complet.vim fichier Vim 7.2 sur ce lien (Remarque: n'utilisez cette option si vous avez un non-modifié Vim, la version 7.2):

http://pastebin.com/f33aeab77

Et obligatoire, la capture d'écran:

http://img16.imageshack.us/img16/2073/vimy.png (Désolé pour imageshack)

36voto

Janosimas Points 119

ceci est mon premier post ici et je ne savais pas comment faire une observation, la réponse d'Eduardo fait en sorte que "(" et "{" ne soient pas mutés et que la syntaxe de bugs soit foldind, je l'ai un peu modifiée pour résoudre ce problème.

 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
 

17voto

thomasrutter Points 42905

Fait intéressant, la syntaxe surligneur dans VIM ne prennent pas en charge l'application d'une syntaxe à des identifiants ou des noms de fonction - du moins pas de la syntaxe surligneur pour le C et le C++. Donc, même si vous n':

:hi Function guifg=red

ou

:hi Identifier guifg=red

il n'est pas de donner à ces une couleur. J'ai juste ne semble pas être beaucoup plus que des mots clés et des constantes pour ces langues.

Ici, quelqu'un a commencé à étendre la rpc fichier de syntaxe pour soutenir les noms de méthode. C'est un début je pense. http://vim.wikia.com/wiki/Highlighting_of_method_names_in_the_definition

11voto

Mykola Golubyev Points 21210

La solution consiste à utiliser la base de données ctags construite. Alors créez-en un avec l'utilitaire ctags . Puis définissez la variable 'tags' et mettez le texte suivant à

 ~/.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()
 

Je dois vous avertir que cela peut fonctionner très lentement sur la très grande base de données ctags.

Il y a aussi une solution sur vim.org mais je n'ai pas essayé celle-ci. Dites-moi si cela marche pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X