Help us understand the problem. What is going on with this article?

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

More than 3 years have 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で開く必要すら無かった
szk3
My interests are AWS/GCP/VSCode/Node.js/TypeScript/golang/rust. My posts represent the views of the individual, not the official position of the organization.
lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away