Edited at

vimで長い行を持つファイルを開いた時にもっさりする現象を解消する

More than 1 year has passed since last update.


:map: 背景

AWSのkinesisから受け取るイベントをファイルに保存し、lambdaをローカルでテストする際の入力値として使おうとしました。

このファイルは1行で構成されるJSONファイルでサイズは約3.5Mあります。中身はほぼBufferをJSON.stringifyしたものです。

このファイルをvimで開こうとした時に、ものすごく重くなる現象になりました。

"fixture/event.json" [noeol] 1L, 3697817C

環境は以下になります。

$ vim --version

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Sep 13 2016 12:01:08)
MacOS X (unix) version


:round_pushpin: 対応

参考になったのは、以下の記事です。


巨大なファイルを開いてGすると重い

https://teratail.com/questions/24046


この例では、ファイルの行数が多いケースですがきっと原理は一緒のはず。

syntaxの評価が重いと予想。

なので一旦こんな感じで設定しました。

augroup vimrc-highlight

au!
au Syntax json if 1000 < col('$') | syntax off | endif
augroup END

随分良くなりましたが、それでもまだまだ遅いままでした。

これは、synmaxcol(構文アイテムを検索する桁数の最大値)を設定していなかった為、デフォルト値の3000まで評価しつづけるからだと判断。

よくよく考えると、"1行に1000文字も入っているような構文解析の必要性があるファイル" を読むことは稀なので、Syntaxに関係なくsynmaxcolでまるっと設定することにしました。

synmaxcolのヘルプには以下のように記述があります。


   これは長い行を持つXMLファイルの描画が非常に遅くなるのを避けるために役

に立つ。

で、最終的に以下を設定することで解消しました。

set synmaxcol=320

設定値を320にしたのは、colorcolumnを80に設定しているので、大体4倍くらい横に長いと萎えるいうフィーリングで決めました。

もろもろ反省(※)はありますが、一旦これで良しとしました。

もっと良いやり方や設定がありましたら教えてください。

誰かのトラブルシューティングになれば幸いです。


※ 反省


  • ファイル出力の際にprettyしておけばよかった →prettyしたらしたでファイルサイズが肥大化

  • ファイルの中身を確認したかっただけなのでvimで開く必要すら無かった