web-dev-qa-db-ja.com

vimでは、TODO:とFIXME:をどのように強調表示しますか?

Vimでは、FIXMEとTODOが強調表示されていますが、FIXME:とTODO:(キーワードの後に​​コロンがあることに注意してください)を強調表示できませんか?これを実現するには、.vimrcに何を入れればよいですか?

45
Paul Biggar

さて、あなたはすでに問題を見つけましたが、ここに理由があります。

構文マッチングには、キーワード、マッチ、リージョンの3つの基本タイプがあります。キーワードは固定文字列であり、通常は基本言語のキーワード(intdouble、...)に使用されます。また、場合によっては、FIXMEおよびTODOにも使用されます。私は本当に固定文字列を意味します。正規表現を使用する一致や地域とは異なり、正確で完全な単語でなければなりません。たとえば、C構文から:

syn keyword   cTodo   contained    TODO FIXME XXX

ほぼすべての組み込み構文定義で、グループ名が異なる(cTodo)ように見えます。

iskeywordは、指定された文字をキーワードの一部にできるかどうかをvimに伝えます。デフォルトでは、コロンは含まれていないため、キーワードを検索すると、vimは「FIXME:」を「FIXME」として認識し、コロンを無視します。コロン(set iskeyword+=:)、追加の強調表示を定義できます:

syn keyword   myTodo   contained   TODO: FIXME:

既存の構文/ハイライトグループにどのように組み込むかは、あなた次第です。ファイルタイプが1つだけの場合は、その構文のtodoグループに追加できます(cTodoなど)。どこでも必要な場合は、私が提案したように「myTodo」を実行してから、Todoハイライトグループ(hi def link myTodo Todo)。

または、iskeywordをそのままにして(おそらくこれをお勧めします)、単純に一致を使用できます。

syn match   myTodo   contained   "\<\(TODO\|FIXME\):"
hi def link myTodo Todo
56
Cascabel
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は、「Comment」で終わるすべてのグループに加えて、vimCommentTitleを追加します。ここで、" TODO: fooそれ以外の場合、MyTodoとして強調表示されません。

15
blueyed

独自の環境を作成する場合、make syntax file (not .vimrc)

  • グローバル構文ファイルはvimディレクトリにあります(例:/usr/share/vim/vim72/syntax/c.vim)

  • 〜/ .vim/syntax/c.vimを作成すると、独自の構文を追加できます。 (オーバーライド)

そのファイルに構文を追加するだけです。 (@Jefromiが行う方法)

2
MinSung Jung