「<(>)」で一致しているのに、「<(>)」の終了「>」と一致しない一致ペアを作成するにはどうすればよいですか?


8

私はset matchpairs+=<:>C ++コードで使用していますが、うまく機能します。ただし、次のC ++コードのように、完全に存在しない場合もあります。

#include <type_traits>
template<int X> typename std::enable_if<(X>9),int>::type func() { return 5; }
int main() { func<10>(); }

ここで、カーソルをの<後ろに置くenable_ifと、>in X>9が強調表示されます。もちろん、それはC ++コンパイラでもIDEでもないVimの観点からは理にかなっています。しかし、閉じていない括弧で分割されたペアと一致しないようにする簡単な方法はありますか?<()>つまり、閉じ山括弧を一致させたいのですが、一致させたくあり<(>)ません。


好奇心旺盛ですが、matchitを使用していますか?github.com/tmhedberg/matchitは、この種の問題を解決することが多いためですが、問題が解決するかどうかは
わかり

@DoktorOSwaldoいいえ、単なるvimです。
ルスラン

回答:


1

matchitおそらくあなたのためにこれをしません。おそらく、の小さなラッパー関数を記述します%。これにより、カーソルの下の文字が次のように識別されます。

let curChar = char2nr(matchstr(getline('.'), '\%' . col('.') . 'c.'))

次に、次のような簡単なネストされたテストがいくつか続きます。

test-1: if curChar is not `<`, then
     act simply the way `%` would
else 
    test-2:  if whatever lies between current `<` and following `>` contains one of ( or ) or { or } or [ or ], then
        do not jump or highlight
    else
        jump or highlight

つまり、vimでスクリプトを取得します ...

これがどうなるか教えてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.