ただし、これらの行を.vimrcに追加した後、機能しませんでした。
これは、Vimが'syntax'オプションを設定するときに既存の構文項目をクリアするためです。これは、古い構文項目を保持すると、奇妙な状況が発生するためです。あなたが持っているバッファをsyntax=foo使用しているset syntax=bar場合は、 fooとの両方の構文が強調表示されているバッファになりbarます。
Vimが起動すると、vimrc(起動時に)1回ロードされますが、filetypeor syntaxオプションが設定されるたびにファイルタイプと構文ファイルがロードされ、vimrcで設定した値がリセットされます。
リセットしない場合でも、vimrcに追加するだけではお勧めできません。これは、でのバッファだけでなく、すべてのバッファに適用されるためsyntax=cです。
以下のテキストは、Unix-yシステム上のVimを想定していますが、NeovimおよびWindowsユーザーでも機能します。
- Neovimユーザーはに置き換える必要が
~/.vim/あり~/.config/nvim/ます。
- Windowsユーザーはに置き換える必要が
~/.vim/あり%USERPROFILE%\vimfiles\ます。
ファイル全体を上書きする
何かを変更する最も簡単な方法は、単にそれを上書きすることです。そのためには、でファイルを作成します~/.vim/<file>.vim。
<file.vim>への相対パスです$VIMRUNTIME(サブディレクトリを含む)。あなたの例では、それはであるべきですsyntax/c.vim。のファイルの代わりに読み込まれます$VIMRUNTIME。
この結果、変更を加えるのが簡単になります。既存の構文ファイルを修正するのは、少し難しい場合があります。欠点は、システム全体のファイルに加えられた将来の更新を取得できないことです。
私はしばしばこれを開始点として使用して構文ファイルを実験し、後で以下に説明する方法の1つを使用してローカルの追加に対するローカルの変更を抽出します。
ローカル追加
構文ファイルにローカル追加を追加するには2つの方法があり、それらは機能的に同一であり、好みの方法を使用できます。
Syntax autocmd
Syntaxautocmdを使用します。
augroup ft_c
autocmd!
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
autocmd Syntax c hi cFunction gui=NONE guifg=#B5A1FF
augroup end
複数のコマンドをチェーン|することは、:synコマンドの一部として解釈される傾向があるため、ここでは問題があることに注意してください。これが、私がautocmd Syntax c数回繰り返した理由です。別の方法は、関数を使用することです。
fun s:c()
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF
endfun
augroup ft_c
autocmd!
autocmd Syntax c call s:c()
augroup end
利点は、すべての変更を単一のファイルに含めることができることです。不利な点は、特に変更が多い場合は、見苦しいことです。
ディレクトリの後
次のディレクトリを使用します~/.vim/after/<file>.vim。
これは、<file>.vimhasの後にロードされます。ここで、<file.vim>は$VIMRUNTIME(サブディレクトリを含む)への相対パスです。あなたの例では、それはであるべきですsyntax/c.vim。
もご覧ください:help after-directory。
利点は、特に多くの変更がある場合、autocmdよりも読みやすくなることです。欠点は、Vimのセットアップを別のマシンにミラーリングする場合、追加のファイルをコピーする必要があることです(これは、多くの人がVitファイルをGitHubリポジトリに保持するため、マシン間で簡単にミラーリングできる重要な理由です) )。
~/.vim/after/syntax/c.vim代わりに追加してみてください。