100MBのMySQLデータベースバックアップファイルがあり、16GのRAMを搭載したLinuxボックスのVimで開くことができません。
Vimはハングします(少なくとも使用できません)。これは私が理解していないことです。16 GBのRAMがありますが、エディターで100 MBのファイルを読み込めないのはなぜですか?
Vimが原因ですか?すべてのメモリ管理はOSによって処理されると思いました。
100MBのMySQLデータベースバックアップファイルがあり、16GのRAMを搭載したLinuxボックスのVimで開くことができません。
Vimはハングします(少なくとも使用できません)。これは私が理解していないことです。16 GBのRAMがありますが、エディターで100 MBのファイルを読み込めないのはなぜですか?
Vimが原因ですか?すべてのメモリ管理はOSによって処理されると思いました。
回答:
Vimは、異常に長い行を持つファイルで問題を起こすことがあります。テキストエディタであるため、テキストファイル用に設計されており、行の長さは通常最大で数百文字です。
データベースファイルには多くの改行文字が含まれていない可能性があるため、1つの100 Mbの長い行である可能性があります。Vimはこれに満足せず、おそらく動作しますが、ファイルのロードに非常に長い時間がかかる場合があります。
私は確かにVimで100 Mbよりもはるかに大きいテキストファイルを開いています。ファイルは一度にメモリに収まる必要さえありません(Vimは必要に応じて変更をディスクにスワップできるため)。
set synmaxcol=120
(または他の適切な数値)。過去にこれからの大幅な高速化に気づきました。
大きなファイルを直接表示する場合less
はvim
、代わりに使用してみてください。Vimは、最初の読み込み時にさまざまな処理を実行します-使用する構文を決定するために(場合によっては複数のパスで)ファイルをスキャンし、構文の強調表示を実行し、ファイルの上下でモードラインを検索します。次に、ファイルを編集するときに、vimはスワップファイルを保存し、元に戻すツリーを保持します(vimの元に戻す履歴は分岐し、他のすべての(?)エディターのように線形ではありません)。
巨大なファイルでは使用できない理由の正当性は必ずしもありませんが、それが理由のいくつかの説明に過ぎません。
Vimはファイルをそのままメモリにロードするだけではありません。内部構造(行、単語など)に変換し、内部スクリプト言語を使用して構文の強調表示を実行します。これらはすべてメモリ(文字の1バイト以上の全体)とCPU時間を消費します。
バイナリとしてロードしてみてください。本当に大きな非テキストファイルの場合、私はそれでうまくいきました。
vim -b HUGEFILE
IIRCがvimを16進エディターとして使用することも可能です:http : //usevim.com/2012/06/20/vim-binary-files/
うまくいけば、問題はRAMよりも一時ファイル(スワップなど)に必要なVIMに関係することです。
多くの場合、VIMによって作成された一時ファイルは、開いているファイルと同じディレクトリにあります。これが当てはまる場合は、現在のディレクトリの使用可能なディスク領域を確認して確認できます。
幸いなことに、VIMのインデックス作成/スワップファイル用に別の場所を指定する方法に関する優れたドキュメントがあります。
スワップファイルを無効にすることもできます
hexer
。