2009-09-23 7 views
18

Ich komme zu Vim von TextMate und möchte mein vim colorscheme anpassen. Es wäre sehr hilfreich, wenn ich herausfinden könnte, zu welcher (n) Highlight-Gruppe (n) ein bestimmtes Wort oder Symbol gehört. In Textmate, würde ich das Caret auf dem Wort/Symbol in Frage stellt, dann drückten Sie Strg-Shift-p und eine Werkzeugspitze scheint etwas sagen wie:Finden Sie heraus, zu welcher Highlight-Gruppe ein bestimmtes Schlüsselwort/Symbol in vim gehört

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

Aus diesen Informationen, ist es wirklich einfach ist, zu bearbeiten ein TextMate-Farbschema zum Anwenden (oder Entfernen) von Formatierungen auf den betreffenden Text

In Vim, wenn ich die Formatierung für ein bestimmtes Wort oder Symbol ändern möchte, bin ich nicht sicher, wo ich anfangen soll. Gibt es etwas, das TextMates ctrl-shift-p entspricht?

Antwort

22

Ich bin mir nicht sicher, ob ich richtig verstanden habe, aber suchst du das?

" 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 auf - danke! – nelstrom

+0

Ich habe nur eine Änderung vorgenommen: Mapping der Befehl zu ctrl-shift-p aus Gründen der Konsistenz. 'nmap : Anruf SynStack() ' – nelstrom

3

UPDATE: Von :help synID() (siehe Beispiel):

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

Soweit ich weiß, ist das Beste, was Sie tun können :syntax, die Sie für eine Auflistung aller Syntax geben geladen die aktuelle Datei. Ich weiß nichts, was syntaktische Analyse des aktuellen Puffers geben würde.

Beachten Sie, dass :syntax nur die Syntaxelemente definiert, die Verwendung des Befehls :highlight, die die Färbung für ein Syntaxelement geben.

Sobald Sie entschieden haben, welche Änderungen Sie vornehmen möchten, legen Sie sie in ~/.vim/after/syntax/<filetype>.vim. Diese werden Ihre Änderungen anwenden, nachdem die Standard-Syntaxdateien geladen wurden.

+0

Die Hilfedokumente für Vim sind hervorragend, aber ich konnte die Informationen zu synID nicht ohne Ihre Hilfe finden. Vielen Dank. Auch der Tipp über das Überschreiben von Syntaxdateien durch Einfügen in das 'after'-Verzeichnis wird sehr geschätzt. – nelstrom

+0

@nelstrom - Über "help vimfiles" können Sie sehen, welche Verzeichnisse welche Präferenzen haben (der \ after-Teil). – Rook

+0

@nelstrom - ein schneller Weg zu sehen, was ein relevantes Hilfethema sein könnte, ist die Verwendung der STRG-D Tastenkombination, um mögliche Vervollständigungen zu sehen, wenn '' help syn' eingegeben wird - es zeigt Ihnen alle Hilfethemen, die der Zeichenkette entsprechen. " syn ", so habe ich' synID() 'gefunden. – rampion

12

Eine weitere Möglichkeit, viele Informationen über die Hervorhebung zu erhalten:

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> 

Wenn ich über einen Kommentar in einer C-Datei verschieben und F3, drücke ich bekommen:

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

zeigt an, dass es sich um die hervorgehobene Gruppe cCommentStart handelt, die mit Comment verknüpft und grün eingefärbt ist (#00ff00). Dies ist (geändert) von here, siehe diese Seite für weitere Informationen.

+0

Das ist genial. Ich finde das viel hilfreicher als die einfache 'hi'-Kennung. – mybuddymichael

Verwandte Themen