12

VIM では、"(" と ")" を強調表示するという単純なタスクを実行する必要があります。これは、次の 2 つのコマンドを発行することで簡単に実行できます。

:syn match really_unique_name display "[()]"
:hi really_unique_name guifg=#FF0000

しかし、空の .vimrc に同じコマンド (もちろん ':' なし) を追加して VIM を再起動すると、.cpp ファイルで "(" と ")" が強調表示されなくなります。.cpp ファイルを作成/ロードすると、VIM はカスタム ハイライトをオーバーライドする構文ファイルをロードするようです。.vimrc ファイルでハイライトを構成して、標準の構文定義の後に実行するか、標準の構文定義の影響を受けないようにするにはどうすればよいですか?

4

4 に答える 4

24

4 つのオプションがあります (そのうちの 2 つは他の人によって提案されています)。

  1. vimfilesのafter構造を使用します (~/.vim/after/syntax/cpp.vim):

    :help after-directory
    
  2. 現在のウィンドウに一致を使用します。

    :match really_unique_name "[()]"
    
  3. 現在のウィンドウに対して再び matchadd() を使用しますが、これにより、後で必要になった場合に個々の一致を削除できます。

    :call matchadd('really_unique_name', "[()]")
    " Or
    :let MyMatchID = matchadd('really_unique_name', "[()]")
    " and then if you want to switch it off
    :call matchdelete(MyMatchID)
    
  4. Dr Chip のrainbow.vimプラグインをインストールして、インデント レベルに応じてブレースをさまざまな色で強調表示します。

この状況では、一般的な構文の一部にしたいように見えるため、オプション 1 をお勧めします。マッチを使用し、(ウィンドウ固有ではなく) バッファー固有にしたい場合は、次のようなものが必要です。

function! CreateBracketMatcher()
    call clearmatches()
    call matchadd('really_unique_name', "[()]")
endfunc
au BufEnter <buffer> call CreateBracketMatcher()

詳細については、次を参照してください。

:help after-directory
:help :match
:help matchadd()
:help matchdelete()
:help clearmatches()
:help function!
:help autocmd
:help autocmd-buffer-local
:help BufEnter

この質問に対する私の回答にも興味があるかもしれません。これは、より一般的な演算子の強調表示をカバーしています。

于 2009-07-31T12:26:29.463 に答える
9

設定を ~/.vim/after/syntax/cpp.vim に入れます

于 2009-07-31T11:26:01.160 に答える
6

syn マッチを使用する代わりに、単にマッチを使用します。例えば:

hi really_unique_name guifg=#FF0000
match really_unique_name "[()]"

matchsyn-match よりも優先順位が高く (つまり、syn-match によって生成された強調表示よりも強調表示の方が優先されます)、(行儀の良い) 構文ファイルがそれを台無しにするべきではありません。

match に関する 1 つの注意点は、それがバッファーごとではなく、ウィンドウごとであることです。

追加のマッチが必要な場合は、2match と 3match を使用できます。

詳細について:help :matchは、Vim を参照してください。

于 2009-07-31T09:38:50.313 に答える
2

私は通常、次のようにします。

:hi really_unique_name guifg=#FF0000
:au BufNewFile,BufRead * :syn match really_unique_name display "[()]"

auの略ですautocmd。ヘルプが詳しく教えてくれます。

于 2012-12-10T10:50:28.577 に答える