W Vimie jak wyróżnić TODO: i FIXME:?

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

Author: Paul Biggar, 2010-11-04

3 answers

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

Istnieją trzy podstawowe typy dopasowania składni: słowa kluczowe, dopasowania i regiony. Słowa kluczowe są stałymi ciągami znaków, Zwykle używanymi dla słów kluczowych w języku podstawowym(int, double, ...), a także, w Twoim przypadku, dla FIXME i TODO. Naprawdę mam na myśli stałe ciągi; muszą być dokładne i całe słowa, w przeciwieństwie do dopasowań i regionów, które używają regex. Na przykład ze składni C:

syn keyword   cTodo   contained    TODO FIXME XXX

Wygląda tak w zasadzie wszystkie wbudowane definicje składni, tylko z różnymi nazwami grup (cTodo).

iskeyword mówi Vimowi, czy dany znak może być częścią słowa kluczowego. Domyślnie nie zawiera dwukropków, więc szukając słów kluczowych, vim widzi "FIXME:" jako "FIXME" i ignoruje dwukropek. Jeśli zaznaczysz dwukropek (set iskeyword+=:), możesz teraz zdefiniować dodatkowy bit podświetlenia:

syn keyword   myTodo   contained   TODO: FIXME:

To od Ciebie zależy, jak chcesz pracować z istniejącymi grupami składni/podświetleń. Jeśli chodzi o jeden typ pliku, to można go dodać do grupy todo składni (np. Jeśli chcesz go wszędzie, możesz zrobić "myTodo", jak sugerowałem, a następnie połączyć go bezpośrednio do grupy podświetlania Todo (hi def link myTodo Todo).

Alternatywnie możesz zostawić iskeyword w spokoju (chyba polecam) i po prostu użyć dopasowania:

syn match   myTodo   contained   "\<\(TODO\|FIXME\):"
hi def link myTodo Todo
 49
Author: Cascabel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-04 14:17:10
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 w przeciwnym razie nie zostałby wyróżniony jako MyTodo.

 10
Author: light2yellow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-04 01:39:09

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

  • Globalny plik składni znajduje się w katalogu vim (np. /usr/share/vim/vim72/syntax / c.vim)

  • I jeśli zrobisz ~/.vim / syntax / c. vim, wtedy możesz dodać składnię do swojego własne. (override)

Wystarczy dodać do tego pliku dodatkową składnię. (tak robi @Jefromi)

 1
Author: MinSung Jung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-16 08:13:33