3

プロジェクトに取り組んでいるときに、データをいじりたいことがあります。多くの場合、データは1行にあり、巨大です(> 25k文字)。この行が画面からはみ出す可能性があることは理解set nowrapしていますが、set wrap他の理由で好きになる傾向があります。したがって、回避策として、これらの長い線をマーカーの折り目で非表示にします(例{{{ long line }}})。これは問題なく動作しますがsynmaxcol、何らかの理由で問題が発生しました。synmaxcolファイルを開いたときに折りたたまれた行がそれを超えると、構文の強調表示が実行されます。例えば:

ここに画像の説明を入力してください

ただし、フォールドを開くとすぐに、構文は自動的に修正されます。

ここに画像の説明を入力してください

ただし、毎回折り目を開かなければならないのは面倒です。この例でわかるように、行は実際にはそれほど長くはありません。単にを超えていsynmaxcolます。synmaxcol「文字列」要素で超過しているため、ファイルの残りの部分は文字列として強調表示されます(したがって、単一の二重引用符だけで停止します)。

なぜこれが起こっているのですか、どうすれば修正できますか?さまざまな構文ファイルとファイルタイプでこれを試しましたが、それでも発生します。また、プラグインなし、最小限のvimrc(のみを含むsyn on)、設定するモードラインを使用して試してみましたがfdm=marker:synmaxcol=60、それでも発生します。

4

1 に答える 1

1

手動で入力:syntax sync fromstartして、開いたファイルの先頭からVimに構文を再スキャンさせることができます。
便宜上、ホットキーを定義することをお勧めします。

noremap  <F5> <Esc>:syntax sync fromstart<CR>
inoremap <F5> <C-o>:syntax sync fromstart<CR>

これで、F5キーを押して、ほとんどの構文強調表示の問題をクリーンアップできます。

また、Vimの修正構文の強調表示もご覧ください-wikiページ
さらに:help:syn-sync-firstを読むと、この問題にさらに光が当てられる可能性があります。

アップデート:

私は自分のマシンでこの動作を再現することができました(私はVim 7.3.429を実行しています)。
ただし、フォールドマーカー{{{}}}ブロックコメントをラップすると、vimは構文を正しくレンダリングしました。コマンドを使用して、適切にラップされたフォールドマーカーを作成できますzfVimのヒント:折りたたみの楽しみを参照してください。

通常、Vimは現在アクティブな構文に基づいて正しいブロックコメント文字列を選択します。しかし、私のVimはかなりバニラで、Ruby構文を認識しませんでした。autocmd FileType ruby set commentstring==begin%s=end.vimrcファイルで指定して、適切なブロックコメントを設定できます。詳細については、:fold-create-markerを参照してください。

もう1つの解決策はset synmaxcol=0、を効果的に無限大に設定することです。これにより、Vimは、行の長さに関係なく、行全体の構文をチェックします。ただし、そのためにどのようなパフォーマンスペナルティを支払う必要があるのか​​わかりません。

于 2012-08-13T15:02:39.050 に答える