コードをナビゲートしているときにvimがランダムに点滅するのはなぜですか?


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

ハイチャートのサンプルの編集のhtmを開始しています:

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

問題のアニメーション

私は、コードをナビゲートしていると私は、矢印キーだけと使用しています HomePage UpPage Down、およびEndキーを。

2分後、この視覚的な不具合が発生します。カーソルの下の画面の半分が構文の強調表示を失い、1つの色になります。私がヒットした場合Page DownPage Up、構文の強調表示が復元されます。

内部にJavaScriptを含むHTMLコードが影響を受けます。


これは、試した他の端末で起こりますか、それとも1つだけですか?
fruglemonkey 2016年

映画では、それは裸のxtermです。これは、xterm内の画面でも発生しています。ほかに何か?コンソール?いいえ、まだ試していません。
austronaut2123

それなら、コンソールでも起こりますか?テストする必要があります
fruglemonkey 2016年

はい。それは...
austronaut2123

minlines現在の構文強調表示の設定を増やすと役立ちますか?つまり、:syn sync minlines=800(必要に応じて調整します)。
Zilk、2016

回答:


1

これは、構文の「キーワード」を認識して強調表示するvimのシステムの問題であり、キーワードを認識するのに十分なコンテキストがありません。

vimの構文システムの基本概念(基本的な構文要素の検索とタグ付け)は、 :h usr_44

基本的にvimは正規表現を使用してファイル内の構文要素を認識します。これらが識別されると、ハイライトルールが適用されてそれらのコード構成に色が付けられます(つまり、「構文ハイライト」を実行します)が、:h 44.10vimで説明されているように、ファイルの先頭では、現在のビューポートの最上部から上方向にいくつかの行(たとえば、10行または100行)を開始します。
開始HTMLタグや関数定義などの構文構造がvimが解析を開始するポイントよりも高く開始すると、vims構文の正規表現が壊れます。

通常、これを修正するには、vimが解析を開始するポイントを増やします。
ビューポートvimの一番上の行から何行が解析を開始しているかを調べるには、次のようにします。

:syntax sync

HTMLファイルを表示したときの出力は次のとおりです。

:syntax sync
--- Syntax sync items ---
syncing on items; minimal 10, maximal 100 lines before top line
[lots of other output here...]

同期に問題があった場合-そのファイルについてのみ-でminlinesを増やします

:syntax sync minlines=200

この問題が繰り返し発生する場合は、修正が少し難しくなります。これは、sync値が、編集しているファイルタイプ専用の構文ファイルで設定されることが多いためです。たとえばsyntax sync minlines、htmlファイルタイプでは、構文ファイルで設定されています。

/usr/share/vim/vim74/syntax/html.vim

CSSファイルの構文解析と構成値は

/usr/share/vim/vim74/syntax/css.vim 

シェルが入りsh.vimます。
これらの構文スクリプトは、あなたがタイプのファイルを開く時に実行さfoo.cssbar.htmlbaz.shこれらのスクリプトは、離れてあなたの設定を吹くだろうので、あなたのvimrcではないでしょう仕事にラインを設定するので、一つの解決策は、トリガーときautocmdを使用することです、などファイルを入力してください

autocmd BufEnter *.html :syntax sync minlines=200

0

これらはCMakeList.txtファイルで取得します。これは構文強調表示メカニズムの一部です。また、JavaScriptコードのある「長い」(実際には数ページの)HTMLでも取得できます。これらについては、次のコマンドを使用します。

:syn sync fromstart

そしてほとんどの場合それは問題を解決します。

非常に大きなファイルを編集する場合、コマンドによってvimが非常に遅くなることに注意してください。ほとんどの場合、私にとって「遅さ」は我慢できる以上のものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.