2014-12-29 13 views
5

Tôi muốn các ký tự ascii không hiển thị như được thảo luận here, nhưng cú pháp đánh dấu biến mất khi ký tự không phải là ascii nằm bên trong nhận xét. Điều tra một chút vấn đề, tôi đã phát hiện ra tại vim-manual rằng một mục bắt đầu trước đó có ưu tiên cao hơn (mục thứ 3). Từ help :syn-priority:Đặt mục để ưu tiên nổi bật cao hơn trên vim

Khi một số mặt hàng cú pháp có thể phù hợp, các quy tắc được sử dụng:

  1. Khi có nhiều trận đấu hay Region mục bắt đầu ở vị trí tương đương, mục được xác định cuối cùng có ưu tiên.

  2. Từ khóa có mức độ ưu tiên so với Mục phù hợp và mục Vùng.

  3. Một mục bắt đầu ở vị trí cũ hơn có ưu tiên hơn các mục bắt đầu ở các vị trí sau này.

Tôi hiện đang sử dụng này:

syntax match nonascii "[^\x00-\x7F]" 
highlight nonascii cterm=underline ctermfg=red ctermbg=none term=underline 

tôi cố gắng dành ưu tiên cao hơn các đề mục phù hợp nonascii sử dụng các tùy chọn nextgroup:

syntax match nonascii "[^\x00-\x7F]" nextgroup=Comment 

contains lựa chọn:

syntax match nonascii "[^\x00-\x7F]" contains=ALL 

nhưng không hoạt động. Tôi cũng đã cố gắng vô hiệu hóa các bình luận tạm thời (highlight clear Comment) mà không có hiệu ứng mong muốn (các bình luận của tôi nhận được mà không đánh dấu, nhưng các nonascii tiếp tục unhighlighted). Những gì tôi đang mất tích?

Trả lời

5

Có, nhóm cú pháp tùy chỉnh của bạn không khớp vì đã có kết quả phù hợp cho nhận xét (hoặc các yếu tố cú pháp khác từ tập lệnh cú pháp hiện có).

Giải pháp là cho Vim biết rằng nhóm nonascii của bạn là containedin các nhóm đó, để Vim sẽ cố gắng khớp ở đó (và không chỉ ở cấp cao nhất chưa được đổi màu). Điều phức tạp này là nhóm cú pháp cho các chú thích phụ thuộc vào kịch bản cú pháp và do đó trên filetype (những tên này là khá thường xuyên). Trong ví dụ sau, tôi đã sử dụng tên cho tệp C và Vimscript:

:syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment 
1

Ai đó đã trả lời câu hỏi. Tuy nhiên, đối với những người khác vẫn gặp sự cố, dưới đây là một giải pháp khác để đánh dấu các ký tự không phải ascii trong các nhận xét (hoặc bất kỳ nhóm nào trong vấn đề). Nó không phải là tốt nhất, nhưng đó là một sửa chữa tạm thời.

Người ta có thể thử:

:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained | 
      \ highlight nonascii ctermfg=yellow guifg=yellow 

Nó rất gần đến việc thực hiện ban đầu và giải pháp khác. Thậm chí bạn có thể xóa contained, nhưng, từ tài liệu, có thể có vấn đề tiềm ẩn khi đệ quy chính nó (như tôi hiểu). Để xem các mẫu được xác định khác, phần syn-contains sẽ chứa mẫu đó.

:help syn-containedin 
:help syn-contains 
Các vấn đề liên quan