Wie kann man dafür sorgen, dass Streichhölzer nicht mit dem Schließen von '>' in „<(>)“ übereinstimmen, während es dennoch mit „<()>“ übereinstimmt?


8

Ich verwende set matchpairs+=<:>mit meinem C ++ - Code und es funktioniert großartig. Aber es gibt einige Fälle, in denen es nicht ganz da ist, wie dieser C ++ - Code:

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

Hier wird , wenn Sie den Cursor auf das setzen , <nachdem enable_ifdie >in X>9wird hervorgehoben. Natürlich macht es aus der Sicht von Vim Sinn, das weder ein C ++ - Compiler noch eine IDE ist. Aber gibt es eine einfache Möglichkeit, dafür zu sorgen, dass keine Paare in nicht geschlossenen Klammern gefunden werden? Dh ich möchte <()>die Schließwinkelhalterung anpassen und <(>)nicht.


nur neugierig, arbeitest du mit matchit? github.com/tmhedberg/matchit , da es diese Art von Problemen oft löst, aber ich bin nicht sicher, ob es in Ihrem Fall helfen wird
Doktor OSwaldo

@ DoktorOSwaldo nein, einfach nur vim.
Ruslan

Antworten:


1

matchitwird dies höchstwahrscheinlich nicht für Sie tun. Sie möchten wahrscheinlich eine kleine Wrapper-Funktion für schreiben %, die das Zeichen unter Ihrem Cursor mit Folgendem identifiziert:

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

gefolgt von ein paar einfachen verschachtelten Tests, so dass:

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

was bedeutet, erhalten Sie Skripte in vim ...

Lassen Sie uns wissen, wie das geht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.