16 GB の RAM があるのに、Vim で 100 MB のテキスト ファイルを開けないのはなぜですか?

16 GB の RAM があるのに、Vim で 100 MB のテキスト ファイルを開けないのはなぜですか?

100MB の MySQL データベース バックアップ ファイルがあるのですが、16G の RAM を搭載した Linux ボックス上の Vim でそれを開くのに問題があります。

Vim がハングアップします (少なくとも使用できません)。これは理解できません。16 GB の RAM があるのに、なぜ 100 MB のファイルをエディターにロードできないのでしょうか?

Vim のせいでしょうか? メモリ管理はすべて OS によって処理されると思っていました。

答え1

Vim は、異常に長い行を持つファイルでは問題が発生することがあります。Vim はテキスト エディターなので、通常は行の長さが最大で数百文字のテキスト ファイル用に設計されています。

データベース ファイルには改行文字があまり含まれていないため、100 MB の単一行になる可能性もあります。Vim はこれに満足せず、おそらく動作するものの、ファイルの読み込みにかなり長い時間がかかる可能性があります。

私は確かに開いた文章Vim では 100 MB よりはるかに大きいファイルも処理できます。ファイルを一度にメモリに収める必要さえありません (Vim は必要に応じて変更をディスクにスワップできるため)。

答え2

私の経験では、Vimは大きなファイル、しかし、長い行このコマンドを使用すると、mysqldump使用短い行を犠牲にして大きなファイル:

$ mysqldump --complete-insert -u -p

さらに、.vimrc次のコマンドを使用して、Vim を開いて、ファイルを解析したりプラグインを読み込まないように指示することもできます。

$ vim -u NONE output.sql

この方法で Vim をロードすると、メモリの使用量が少なくなり、多くのプラグインのように Vim がファイル全体を解析する必要がなくなります。

答え3

「.vimrc とプラグインなしで VIM をロードする (クリーンな VIM) たとえば巨大なファイルの場合

  gvim -u NONE -U NONE -N largefile.sql

答え4

Vim はファイルをそのままメモリに読み込むだけではありません。ファイルを内部構造 (行、単語など) に変換したり、内部スクリプト言語を使用して構文の強調表示を実行したりします。これらすべてがメモリ (文字あたり 1 バイトよりもはるかに多く) と CPU 時間を消費します。

関連情報