2009-09-23 10 views
18

Przybywam do Vima z TextMate i chciałbym dostosować mój vim colorscheme. Byłoby bardzo pomocne, gdybym mógł dowiedzieć się, do której grupy zaznaczeń należy jakieś konkretne słowo lub symbol. W TextMate, chciałbym umieścić daszka na słowo/symbolu w pytaniu, a następnie naciśnij Ctrl-Shift-P i podpowiedzi wydaje mówiąc coś takiego:Dowiedz się, do której grupy wyróżnień przypisane jest konkretne słowo kluczowe/symbol w vim

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

z tej informacji, to jest naprawdę łatwe do edycji motyw kolorystyczny TextMate do zastosowania (lub usunięcia) formatowania do danego tekstu.

W Vimie, jeśli chcę zmienić formatowanie dla określonego słowa lub symbolu, nie jestem pewien, od czego zacząć. Czy istnieje coś podobnego do ctrl-shift-p TextMate?

Odpowiedz

22

Nie jestem pewien, czy dobrze rozumiem, ale czy tego szukasz?

" 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 - dzięki! – nelstrom

+0

Właśnie dokonałem jednej zmiany: odwzorowanie polecenia na ctrl-shift-p ze względu na spójność. 'nmap : zadzwoń pod numer SynStack() ' – nelstrom

3

UPDATE: Od :help synID() (patrz przykład):

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

O ile mi wiadomo, to najlepsze co możesz zrobić, to :syntax, które dadzą Ci listę wszystkich składni załadowanego do bieżący plik. Nie znam niczego, co da syntaktyczne parsowanie bieżącego bufora.

Należy pamiętać, że :syntax właśnie definiuje elementy składni, to jest użycie polecenia :highlight, które nadaje kolorowanemu elementowi składni.

Po wybraniu zmian, które chcesz wprowadzić, umieść je w ~/.vim/after/syntax/<filetype>.vim. Będą one stosować zmiany po załadowaniu domyślnych plików składni.

+0

Dokumentacja pomocy dla Vima jest znakomita, ale nie mogłem znaleźć informacji o synID bez twojej pomocy. Dzięki. Także wskazówka dotycząca nadpisywania plików składni poprzez umieszczenie ich w katalogu 'after' jest bardzo doceniana. – nelstrom

+0

@nelstrom - za pomocą "help vimfiles" można zobaczyć, które katalogi mają preferencje, nad którymi (część \ after). – Rook

+0

@nelstrom - szybki sposób sprawdzenia, co może być istotnym tematem pomocy, to użycie klawisza CTRL-D, aby zobaczyć możliwe uzupełnienia podczas wpisywania ': help syn' - wyświetli wszystkie tematy pomocy pasujące do ciągu znaków" syn ", tak znalazłem' synID() '. – rampion

12

Innym sposobem, aby uzyskać wiele informacji o wyróżnianie:

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> 

Gdybym przejechania komentarzu w pliku C, a następnie naciśnij F3, uzyskać:

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

, która pokazuje, że znajduje się w podświetlonej grupie cCommentStart, która jest połączona z Comment i jest zaznaczona kolorem zielonym (#00ff00). To jest (zmodyfikowane) z here, zobacz tę stronę, aby uzyskać więcej informacji.

+0

To jest niesamowite. Uważam, że jest to o wiele bardziej pomocne niż prosty "hi" identyfikator. – mybuddymichael