2009-09-23 10 views
18

Je viens à Vim de TextMate, et je voudrais personnaliser mon vim colorscheme. Il serait vraiment utile de savoir à quel (s) groupe (s) de mise en évidence un mot ou symbole particulier appartient. Dans TextMate, je mettrais l'accent circonflexe sur le mot/symbole en question, puis appuyez sur ctrl-shift-p et une infobulle semble dire quelque chose comme:Renseignez-vous à quel groupe de mise en évidence un mot-clé/symbole particulier appartient vim

text.html.basic 
meta.tag.structure.any.html 
string.quoted.double.html

De cette information, il est vraiment facile à modifier un thème de couleur TextMate pour appliquer (ou supprimer) la mise en forme au texte en question.

Dans Vim, si je veux modifier la mise en forme d'un mot ou d'un symbole, je ne sais pas par où commencer. Y at-il quelque chose d'équivalent à ctrl-shift-p de TextMate?

Répondre

22

Je ne suis pas sûr d'avoir bien compris, mais êtes-vous à la recherche de cela?

" adds to statusline 
set laststatus=2 
set statusline+=%{synIDattr(synID(line('.'),col('.'),1),'name')} 

" a little more informative version of the above 
nmap <Leader>sI :call <SID>SynStack()<CR> 

function! <SID>SynStack() 
    if !exists("*synstack") 
     return 
    endif 
    echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') 
endfunc 
+0

Spot sur - merci! – nelstrom

+0

Je viens de faire un changement: mapper la commande à ctrl-shift-p par souci de cohérence. 'nmap : appel SynStack() ' – nelstrom

3

MISE À JOUR: De :help synID() (voir l'exemple):

 
synID({line}, {col}, {trans})       *synID()* 
       The result is a Number, which is the syntax ID at the position 
       {line} and {col} in the current window. 
       The syntax ID can be used with |synIDattr()| and 
       |synIDtrans()| to obtain syntax information about text. 
       {col} is 1 for the leftmost column, {line} is 1 for the first 
       line. 
       When {trans} is non-zero, transparent items are reduced to the 
       item that they reveal. This is useful when wanting to know 
       the effective color. When {trans} is zero, the transparent 
       item is returned. This is useful when wanting to know which 
       syntax item is effective (e.g. inside parens). 
       Warning: This function can be very slow. Best speed is 
       obtained by going through the file in forward direction. 

       Example (echoes the name of the syntax item under the cursor): 
         :echo synIDattr(synID(line("."), col("."), 1), "name") 

Pour autant que je sache, le mieux que vous pouvez faire est :syntax, qui vous donnera une liste de toute la syntaxe chargée de le fichier actuel. Je ne connais rien de ce qui va donner l'analyse syntaxique du tampon courant.

Notez que :syntax définit simplement les éléments de syntaxe, c'est l'utilisation de la commande :highlight qui donne la coloration pour un élément de syntaxe. Une fois que vous avez décidé quels changements vous voulez faire, placez-les dans ~/.vim/after/syntax/<filetype>.vim

Ceux-ci appliqueront vos modifications après le chargement des fichiers de syntaxe par défaut.

+0

Les documents d'aide pour Vim sont exceptionnels, mais je n'aurais pas pu trouver les informations sur synID sans votre aide. Merci. En outre, l'astuce concernant l'écrasement des fichiers de syntaxe en les plaçant dans le répertoire 'after' est très appréciée. – nelstrom

+0

@nelstrom - au moyen de "help vimfiles" vous pouvez voir quels répertoires ont des préférences sur lesquelles (la partie après). – Rook

+0

@nelstrom - un moyen rapide de voir ce qui pourrait être une rubrique d'aide pertinente est d'utiliser la combinaison de touches CTRL-D pour voir les complétions possibles en tapant ': help syn' - elle vous montrera toutes les rubriques d'aide correspondant à la chaîne syn ", c'est ainsi que j'ai trouvé' synID() '. – rampion

12

Une autre façon d'obtenir beaucoup d'informations sur la mise en avant:

map <F3> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" . " FG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"fg#")<CR> 

Si je me déplace sur un commentaire dans un fichier C et appuyez sur F3, je reçois:

hi<cCommentStart> trans<cCommentStart> lo<Comment> FG:#00ff00 

qui montre qu'il est dans le groupe de surbrillance cCommentStart, qui est lié à Comment et coloré en vert (#00ff00). Ceci est (modifié) de here, voir cette page pour plus d'informations.

+0

C'est génial. Je trouve cela beaucoup plus utile que le simple identifiant «hi». – mybuddymichael