Làm thế nào để làm cho các trận đấu không khớp với việc đóng '>' trong (<)> trong khi vẫn khớp với nó trong Hồi <()> Lần?


8

Tôi đang sử dụng set matchpairs+=<:>với mã C ++ của mình và nó hoạt động rất tốt. Nhưng có một số trường hợp nó không hoàn toàn ở đó, như mã C ++ này:

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

Ở đây, nếu bạn đặt con trỏ vào <sau enable_if, phần >trong X>9sẽ được tô sáng. Tất nhiên, nó có ý nghĩa từ quan điểm của Vim, không phải là trình biên dịch C ++ hay IDE. Nhưng có cách nào dễ dàng để làm cho nó không khớp với các cặp bị phá vỡ bởi dấu ngoặc đơn không đóng? Tức là tôi muốn <()>khớp với khung góc đóng, và <(>)không.


chỉ tò mò, bạn đang làm việc với matchit? github.com/tmhedberg/matchit , vì nó thường giải quyết loại vấn đề này, nhưng tôi không chắc liệu nó có giúp ích gì trong trường hợp của bạn không
Doktor OSwaldo

@DoktorOSwaldo không, chỉ đơn giản là vim.
Ruslan

Câu trả lời:


1

matchitrất có thể sẽ không làm điều này cho bạn Bạn có thể muốn viết một hàm bao bọc nhỏ cho %, xác định ký tự dưới con trỏ của bạn bằng:

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

tiếp theo là một vài thử nghiệm lồng nhau đơn giản như sau:

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

có nghĩa là, có được kịch bản trong vim ...

Hãy cho chúng tôi biết làm thế nào điều này đi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.