2010-11-04 11 views
32

W vim, FIXME i TODO są podświetlone, ale nie mogę uzyskać FIXME: i TODO: (proszę zwrócić uwagę na dwukropek za słowem kluczowym), aby podświetlić? Co powinienem umieścić w moim .vimrc, aby to się stało?W vim, jak wyróżnić TODO: i FIXME :?

+1

To dziwne; uwydatnić minę z okrężnicą lub bez niej. To wyróżnianie składni jest zdefiniowane w poszczególnych składniach, jak sądzę - czy dzieje się to w jakimś konkretnym filecie? – Cascabel

+0

@Jefromi: Myślę, że dzieje się to w każdym typie pliku. –

+2

co znaczy ": verbose set iskeyword?" Tell? – Benoit

Odpowiedz

46

Cóż, już znalazłeś problem, ale oto dlaczego.

Istnieją trzy podstawowe typy dopasowywania składni: słowa kluczowe, dopasowania i regiony. Słowa kluczowe są ustalonymi ciągami, zazwyczaj używanymi w przypadku słów kluczowych w języku podstawowym (int, double, ...), a także, w twoim przypadku, w przypadku FIXME i TODO. Naprawdę mam na myśli ustalone ciągi; muszą być dokładnymi i całymi słowami, w przeciwieństwie do dopasowań i regionów, które używają wyrażenia regularnego. Na przykład, od C składnię:

syn keyword cTodo contained TODO FIXME XXX 

Wygląda na to, że prawie wszystkie wbudowane w definicji składni, tylko z różnymi nazwami grupowych (cTodo).

iskeyword informuje vim, czy dana postać może być częścią słowa kluczowego. Domyślnie nie zawiera dwukropków, więc przy wyszukiwaniu słów kluczowych vim widzi "FIXME:" jako "FIXME" i ignoruje dwukropek. Jeżeli przyczepność na okrężnicy (set iskeyword+=:), można zdefiniować dodatkowy bit podkreślając:

syn keyword myTodo contained TODO: FIXME: 

To zależy od Ciebie, jak chcesz pracować go do istniejących grup składnia/highlight. Jeśli jest to tylko jeden typ pliku, możesz dodać go do grupy todo tej składni (na przykład cTodo). Jeśli chcesz go wszędzie, możesz zrobić "myTodo" zgodnie z sugestią, a następnie połączyć go bezpośrednio z grupą podświetlającą Todo (hi def link myTodo Todo).

Alternatywnie, można pozostawić iskeyword sam (I pewnie polecam) i po prostu korzystać z meczu:

syn match myTodo contained "\<\(TODO\|FIXME\):" 
hi def link myTodo Todo 
+0

+1 @Jefromi, jednak nie sądzę, żeby to dopasowanie było skuteczne. Wrzuciłem to do mojego .vimrc i jeśli zmienię FIXME na coś innego, to nie jest podświetlone. – g33kz0r

+2

@ G33kx0r: To nie wina tego meczu; działa, jeśli nadal istnieje. Podejrzewam, że włączasz składnię (w ten czy w inny sposób) * po * liniach w przebiegu vimrc, a gdy włączona jest składnia, najpierw usuwa starą składnię, a następnie ładuje odpowiednią. Możesz sprawdzić, czy to dopasowanie jest nadal na miejscu, używając ': syn list myTodo'. Zobacz także ': help składnia-ładowanie'. – Cascabel

+0

Ustawianie pierwszej "składni na", a następnie 'syn pasuje do zawartego w moim todo" \ <\ (TODO \ | FIXME \): "' w moim pliku 'vimrc' i' hi! def link myTodo Todo' nie działa dla mnie. Z drugiej strony, jeśli robię, na przykład, "au BufNewFile, BufRead * .tex syn pasuje do texTodo" \ <\ (TODO \ | FIXME \): "wynikowy plik' tex' jest poprawnie podświetlony. Czy istnieje ogólne rozwiązanie? – petobens

1

Jeśli tworzyć własne środowisko, make syntax file (not .vimrc)

  • składni globalnego plik znajduje się katalog vim (np. /usr/share/vim/vim72/syntax/c.vim)

  • i jeśli yo utwórz ~/.vim/syntax/c.vim, a następnie możesz dodać składnię do swojej własnej . (przesłonięcie)

Po prostu dodaj dodatkową składnię do tego pliku. (Sposób @Jefromi robi)

8
augroup vimrc_todo 
    au! 
    au Syntax * syn match MyTodo /\v<(FIXME|NOTE|TODO|OPTIMIZE|XXX):/ 
      \ containedin=.*Comment,vimCommentTitle 
augroup END 
hi def link MyTodo Todo 

containedin doda go do wszystkich grup kończących się na „Komentarz”, plus vimCommentTitle, gdzie " TODO: foo nie dostanie zaznaczony jako MyTodo inaczej.

+0

Uwagi dotyczące wykorzystania: możesz dodać to do pliku .vimrc i usunąć dwukropek (":"), jeśli chcesz tylko podświetlone słowo, a nie dwukropek za nim. Preferuję podświetlanie, aby przeczytać _NOTE_ :, nie _NOTE: _. Czasami piszę też NOTATKA lub TODO, a nie dwukropek. – Ari

Powiązane problemy