5

C++ の標準ヘッダーは通常、/usr/include/c++/4.x (Linux の場合) にインストールされます。ほとんどのヘッダーには拡張子 (.h、.hpp など) がないため、vim はこれらのファイルの形式を C++ として認識できません。

SOでこの他の質問を見ましたが、そこに投稿された解決策は私の問題を解決しません。そこでの 1 つの解決策は、使用することmodelineですが、標準の C++ ヘッダーには vim に適した署名が含まれていません。代わりに、最初の行に次のようなものを含めます。

// <algorithm> -*- C++ -*-

-*- C++ -*-ファイルの種類を検出するために、そのパターン ( ) を検索できると思います。前述のSOの質問に投稿された他の解決策は、実際にはその方向に進んでいます。答えは、使用することを提案しています:

au BufRead * if search('MagicPattern', 'nw') | setlocal ft=cpp | endif

だから私はやろうとしました:

au BufRead * if search('-*- C++ -*-', 'nw') | setlocal ft=cpp | endif

しかし、機能しません (つまり、ファイルの種類が検出されません)。

そのアプローチを使用してファイルの種類を検出することは可能ですか? これを解決するプラグインやその他の方法はありますか?

4

2 に答える 2

4

nmの答えはトリックを行いますが、これはより良いです:

au BufRead * if search('\M-*- C++ -*-', 'n', 1) | setlocal ft=cpp | endif

への追加の引数searchストップラインであり、このルールが1行目のパターンを持つファイルにのみ適用されることを保証します。

ストップラインがないと、vimrcを含むパターンを含むファイルは一致を満たし、間違った構文規則を使用して強調表示される可能性があるため、これは重要です。

また、ストップラインを使用するとwフラグは不要です。

詳細については:help search、をご覧ください。

于 2012-06-05T20:43:42.590 に答える
4

*通常、Vim 検索では特別です。無効にするに\Mは、検索文字列の先頭で使用します。

au BufRead * if search('\M-*- C++ -*-', 'nw') | setlocal ft=cpp | endif

これは実際に私にとってはうまくいきます。

于 2012-06-05T20:38:21.350 に答える