背景
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
対応
参考になったのは、以下の記事です。
巨大なファイルを開いてGすると重い
https://teratail.com/questions/24046
この例では、ファイルの行数が多いケースですがきっと原理は一緒のはず。
syntaxの評価が重いと予想。
なので一旦こんな感じで設定しました。
augroup vimrc-highlightau!auSyntax json if1000<col('$')|syntax off |endif
augroup END
随分良くなりましたが、それでもまだまだ遅いままでした。
これは、synmaxcol
(構文アイテムを検索する桁数の最大値)を設定していなかった為、デフォルト値の3000まで評価しつづけるからだと判断。
よくよく考えると、"1行に1000文字も入っているような構文解析の必要性があるファイル" を読むことは稀なので、Syntaxに関係なくsynmaxcol
でまるっと設定することにしました。
synmaxcol
のヘルプには以下のように記述があります。
これは長い行を持つXMLファイルの描画が非常に遅くなるのを避けるために役 に立つ。
で、最終的に以下を設定することで解消しました。
set synmaxcol=320
設定値を320にしたのは、colorcolumnを80に設定しているので、大体4倍くらい横に長いと萎えるいうフィーリングで決めました。
もろもろ反省(※)はありますが、一旦これで良しとしました。
もっと良いやり方や設定がありましたら教えてください。
誰かのトラブルシューティングになれば幸いです。
※ 反省
- ファイル出力の際にprettyしておけばよかった →prettyしたらしたでファイルサイズが肥大化
- ファイルの中身を確認したかっただけなのでvimで開く必要すら無かった