vimでは、FIXMEとTODOが強調表示されていますが、FIXME:とTODO :(キーワードの後のコロンに注意)を強調表示することができませんか?これを実現するには、.vimrcに何を入れる必要がありますか?
3 に答える
さて、あなたはすでに問題を見つけました、しかしここに理由があります。
構文マッチングには、キーワード、一致、およびリージョンの3つの基本的なタイプがあります。キーワードは固定文字列であり、通常、基本的な言語のキーワード(int
、、double
...)に使用されます。また、場合によっては、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
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" で終わるすべてのグループに加えて、" TODO: foo
それ以外の場合は MyTodo として強調表示されない vimCommentTitle に追加します。
自分で環境を作るなら、make syntax file (not .vimrc)
グローバル構文ファイルは vim ディレクトリにあります (例: /usr/share/vim/vim72/syntax/c.vim)
~/.vim/syntax/c.vim を作成すると、独自の構文を追加できます。(オーバーライド)
そのファイルに追加の構文を追加するだけです。(@Jefromiのやり方)