Ini bisa menjadi masalah dengan sistem vim untuk mengenali dan kemudian menyoroti "kata kunci" sintaksis yang tidak mendapatkan konteks yang cukup untuk mengenali kata kunci.
Konsep dasar sistem sintaksis vim (menemukan dan menandai elemen sintaks dasar) dijelaskan dalam :h usr_44
Pada dasarnya vim menggunakan regex untuk mengenali elemen sintaksis dalam file, setelah ini diidentifikasi, kemudian menyoroti aturan diterapkan untuk mewarnai konstruksi kode tersebut, (yaitu untuk melakukan "menyoroti sintaks"), tetapi seperti yang dijelaskan dalam :h 44.10
vim tidak mulai parsing dari di awal file, file ini mulai beberapa baris (mis. 10 atau 100 baris) ke atas dari atas viewport Anda saat ini.
Jika konstruksi sintaksis, misalnya tag HTML pembuka atau definisi fungsi dll. Mulai lebih tinggi daripada titik vim mulai parsing, vim sintaks regex terputus.
Biasanya untuk memperbaiki ini, Anda meningkatkan titik bahwa vim mulai parsing.
Untuk mengetahui berapa banyak baris di atas baris atas viewport vim yang mulai digunakan parsing:
:syntax sync
Ini adalah output saya ketika melihat file HTML:
:syntax sync
--- Syntax sync items ---
syncing on items; minimal 10, maximal 100 lines before top line
[lots of other output here...]
jika saya memiliki masalah dengan sinkronisasi - hanya untuk file itu - saya akan menambah minlines dengan
:syntax sync minlines=200
Jika Anda berulang kali mendapatkan masalah ini, memperbaikinya sedikit lebih sulit. Ini karena nilai sinkronisasi sering diatur dalam file sintaks yang didedikasikan untuk tipe file yang Anda edit, misalnya untuk saya syntax sync minlines
untuk tipe file html diatur dalam file sintaks
/usr/share/vim/vim74/syntax/html.vim
sintaks parsing dan nilai konfigurasi untuk file css ada di
/usr/share/vim/vim74/syntax/css.vim
shell dalam sh.vim
dan sebagainya.
Script sintaks ini hanya dijalankan pada saat Anda membuka file dari jenis foo.css
, bar.html
, baz.sh
dll, sehingga pengaturan garis di vimrc Anda akan tidak bekerja karena script ini akan meniup pengaturan Anda pergi, salah satu solusi adalah dengan menggunakan autocmd yang memicu ketika Anda masukkan file
autocmd BufEnter *.html :syntax sync minlines=200