51

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

4

3 に答える 3

61

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

構文マッチングには、キーワード、一致、およびリージョンの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
于 2010-11-04T14:17:10.250 に答える
16
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 に追加します。

于 2015-05-30T23:39:36.090 に答える
2

自分で環境を作るなら、make syntax file (not .vimrc)

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

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

そのファイルに追加の構文を追加するだけです。(@Jefromiのやり方)

于 2014-11-15T05:22:08.627 に答える