Mengapa vim berkedip secara acak saat saya menavigasi kode?

8
# vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Mar 31 2015 23:36:07)
# cat /root/.vimrc 
map <F2> :w\|!sh % <cr>
map <F3> :w\|!bash % <cr>
map <F4> :w\|!python % <cr>
map <F5> :w\|!python % &<cr>

highlight RedundantWhitespace ctermbg=DarkBlue guibg=red
match RedundantWhitespace /\s\+$\|\t/

syntax on
highlight Comment ctermfg=green

Saya mulai mengedit contoh grafik htm:

# vi /var/www/js/highcharts/examples/dynamic-master-detail/index.htm

animasi masalah

Saya menavigasi melalui kode dan aku hanya menggunakan tombol panah dan Home, Page Up, Page Down, dan Endkunci.

Setelah 2 menit, gangguan visual ini terjadi; setengah layar di bawah kursor saya kehilangan sorotan sintaks dan menjadi satu warna. Jika saya menekan Page Downatau Page Up, penyorotan sintaks dikembalikan.

Kode html apa pun dengan javascript di dalamnya terpengaruh.

austronaut2123
sumber
Apakah ini terjadi dengan terminal lain yang pernah Anda coba, atau hanya satu?
fruglemonkey
Dalam film itu, itu adalah xterm telanjang. Ini juga terjadi di layar di dalam xterm. Apa lagi? konsole? Tidak, saya belum mencobanya.
austronaut2123
Apakah itu terjadi juga dalam konsole? Anda harus menguji
fruglemonkey
Iya. Itu ...
austronaut2123
Apakah meningkatkan minlinespengaturan untuk penyorotan sintaksis saat ini membantu? Yaitu, :syn sync minlines=800(sesuaikan sesuai kebutuhan).
Zilk

Jawaban:

1

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.10vim 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 minlinesuntuk 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.vimdan sebagainya.
Script sintaks ini hanya dijalankan pada saat Anda membuka file dari jenis foo.css, bar.html, baz.shdll, 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
the_velour_fog
sumber
0

Saya mendapatkan ini dengan CMakeList.txtfile. Ini adalah bagian dari mekanisme highlight sintaksis. Saya juga mendapatkannya di "long" (beberapa halaman sebenarnya) HTML di mana saya punya JavaScriptkode. Untuk ini, saya menggunakan perintah berikut:

:syn sync fromstart

Dan dalam banyak kasus itu menyelesaikan masalah.

Perhatikan bahwa perintah ini akan membuat vim menjadi sangat lambat jika Anda mengedit file yang sangat besar. Dalam kebanyakan kasus, bagi saya "kelambatan" lebih dari cukup.

Alexis Wilke
sumber