Đây có thể là một vấn đề với hệ thống của vim để nhận ra và sau đó làm nổi bật "từ khóa" cú pháp không đủ ngữ cảnh để nhận ra từ khóa.
Các khái niệm cơ bản của hệ thống cú pháp của vim (tìm và gắn thẻ các yếu tố cú pháp cơ bản) được giải thích trong :h usr_44
Về cơ bản vim sử dụng regex để nhận ra các phần tử cú pháp trong một tệp, khi chúng được xác định, sau đó các quy tắc tô sáng được áp dụng để tô màu các cấu trúc mã đó, (nghĩa là thực hiện "tô sáng cú pháp"), nhưng như được giải thích trong :h 44.10
vim không bắt đầu phân tích cú pháp từ bắt đầu của tệp, nó bắt đầu một số dòng (ví dụ 10 hoặc 100 dòng) trở lên từ đầu chế độ xem hiện tại của bạn.
Nếu một cấu trúc cú pháp, ví dụ: thẻ HTML mở hoặc định nghĩa hàm, v.v. bắt đầu cao hơn điểm vim bắt đầu phân tích cú pháp, vex regex phá vỡ cú pháp.
Thông thường để khắc phục điều này, bạn tăng điểm mà vim bắt đầu phân tích cú pháp.
Để tìm hiểu có bao nhiêu dòng trên dòng trên cùng của khung nhìn vim đang bắt đầu sử dụng phân tích cú pháp của nó:
:syntax sync
Đây là đầu ra của tôi khi xem tệp HTML:
:syntax sync
--- Syntax sync items ---
syncing on items; minimal 10, maximal 100 lines before top line
[lots of other output here...]
nếu tôi gặp vấn đề với việc đồng bộ hóa - chỉ với tệp đó - tôi sẽ tăng các dòng với
:syntax sync minlines=200
Nếu bạn liên tục gặp sự cố này, việc khắc phục sẽ khó hơn một chút. Điều này là do giá trị đồng bộ thường được đặt trong tệp cú pháp dành riêng cho loại tệp bạn đang chỉnh sửa, ví dụ: đối với tôi syntax sync minlines
đối với loại tệp html được đặt trong tệp cú pháp
/usr/share/vim/vim74/syntax/html.vim
phân tích cú pháp và giá trị cấu hình cho các tệp css nằm trong
/usr/share/vim/vim74/syntax/css.vim
vỏ là trong sh.vim
và như vậy.
Những kịch bản cú pháp chỉ chạy tại thời điểm bạn mở một tập tin của các loại foo.css
, bar.html
, baz.sh
vv, do đó thiết lập một dòng trong vimrc của bạn sẽ không làm việc vì những kịch bản sẽ thổi các thiết lập của bạn đi, một giải pháp là sử dụng một autocmd mà trigger khi bạn nhập tập tin
autocmd BufEnter *.html :syntax sync minlines=200