Tại sao vim nhấp nháy ngẫu nhiên khi tôi điều hướng qua mã?


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

Tôi đang bắt đầu chỉnh sửa ví dụ highcharts htm:

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

hoạt hình của vấn đề

Tôi đang điều hướng thông qua mã và tôi chỉ đang sử dụng các phím mũi tên và Home, Page Up, Page Down, và Endcác phím.

Sau 2 phút sự cố thị giác này xảy ra; một nửa màn hình dưới con trỏ của tôi bị mất tô sáng cú pháp và trở thành một màu. Nếu tôi nhấn Page Downhoặc Page Up, tô sáng cú pháp được khôi phục.

Bất kỳ mã html nào có javascript bên trong đều bị ảnh hưởng.


Điều này xảy ra với các thiết bị đầu cuối khác mà bạn đã thử, hoặc chỉ một?
fruglemonkey

Trong phim, nó là xterm trần. Điều này cũng đang xảy ra trong màn hình bên trong xterm. Còn gì nữa không konsole? Không, tôi đã không thử điều này, chưa.
austronaut2123

Nó cũng xảy ra trong konsole? Bạn nên kiểm tra
fruglemonkey

Đúng. Nó không ...
austronaut2123

Việc tăng minlinescài đặt cho tô sáng cú pháp hiện tại của bạn có giúp ích không? Tức là, :syn sync minlines=800(điều chỉnh khi cần thiết).
Zilk

Câu trả lời:


1

Đâ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.10vim 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.vimvà 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.shvv, 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

0

Tôi nhận được những thứ này với CMakeList.txtcác tập tin. Nó là một phần của cơ chế tô sáng cú pháp. Tôi cũng nhận được nó trong HTML "dài" (một vài trang thực sự) nơi tôi có JavaScriptmã. Đối với những điều này, tôi sử dụng lệnh sau:

:syn sync fromstart

Và trong hầu hết các trường hợp, nó giải quyết vấn đề.

Lưu ý rằng lệnh sẽ làm cho vim rất chậm nếu bạn chỉnh sửa một tệp thực sự lớn. Trong hầu hết các trường hợp, đối với tôi, "sự chậm chạp" không thể chịu đựng được.

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.