我有一个100MB的MySQL数据库备份文件,但是在具有16G RAM的Linux机器上的Vim中无法打开它。
Vim只是挂起(至少不可用)。这是我不明白的事情。我有16 GB的RAM,为什么不能在编辑器中加载100 MB的文件?
是因为Vim吗?我以为所有内存管理都是由操作系统处理的。
我有一个100MB的MySQL数据库备份文件,但是在具有16G RAM的Linux机器上的Vim中无法打开它。
Vim只是挂起(至少不可用)。这是我不明白的事情。我有16 GB的RAM,为什么不能在编辑器中加载100 MB的文件?
是因为Vim吗?我以为所有内存管理都是由操作系统处理的。
Answers:
Vim有时会遇到行长过长的文件的问题。这是一个文本编辑器,因此它是为文本文件设计的,其行长通常最多为几百个字符。
数据库文件可能不包含许多换行符,因此可以想象它可能是一个100 Mb长的单行。Vim对此不满意,尽管可能会起作用,但加载文件可能需要很长时间。
我当然已经使用Vim 打开了远远大于100 Mb的文本文件。该文件甚至不需要一次全部放入内存中(因为Vim可以根据需要将更改交换到磁盘上)。
set synmaxcol=120
(或其他一些适当的数字)可能会看到性能提高。过去,我注意到了这一点的巨大提速。
如果不想直接查看大文件,请尝试使用less
而不是vim
。Vim首次加载时会尝试做很多不同的事情-扫描文件(可能是多次扫描),以确定要使用的语法,并突出显示语法,并在文件的顶部和底部搜索模式行。然后,在编辑文件时,vim将保存交换文件并保留撤消树(vim中的撤消历史是分支的,而不是像其他每个(?)编辑器一样线性),并随着文本的变化不断地重新评估突出显示的语法,等等。
所有这些都不一定是为什么它必须无法在巨型文件中使用的理由,而是更多地解释了为什么这样做的原因。
Vim不仅将文件原样加载到内存中。它将其转换为内部结构(线条,单词等),使用内部脚本语言执行语法高亮显示,等等。所有这些都会消耗内存(每个字符要多于一个字节)和CPU时间。
您可以尝试将其作为二进制文件加载。对于非常大的非文本文件,我很幸运
vim -b HUGEFILE
IIRC也可以将vim用作十六进制编辑器,请参见:http : //usevim.com/2012/06/20/vim-binary-files/
希望您的问题更多与VIM有关临时文件(例如交换)的需求多于RAM。
在许多情况下,由VIM创建的临时文件与您打开的文件位于同一目录中。如果是这种情况,则可以通过检查当前目录中的可用磁盘空间来进行验证。
幸运的是,关于如何为VIM的索引/交换文件指定其他位置的文档很好:
您也可以禁用交换文件
hexer
。