我试图在Windows上的gvim中打开一个200MB的文本文件,而且它很窒息。 vim窗口打开,只是保持空白且无响应。我的系统有8GB的RAM,使用记事本在大约2-5秒内打开文件。
我找到了this SO post on editing very large text files in vim,我尝试在关闭插件的情况下打开文件:
vim -u "NONE" my200MBfile.text
但这没有帮助。还有什么我能做的才能让它发挥作用吗?看起来很奇怪vim会在我的机器上窒息什么不是一个非常大的文件。
谢谢!
答案 0 :(得分:7)
大多数可能是语法插件让vim停止。我对Mbs-Gbs文件没有任何问题。 除非我不小心打开了一些 - 不太好的文件类型。
在加载/挂起(中断插件)时按^ C
:syntax off
诀窍。 语法还有其他选项,可以更轻松地使用没有完全“同步”语法突出显示的文件
我更多地使用了这个,我发现我的一些插件确实会对非常大的文件进行操作非常慢。为了好玩,我做到了这一点:
在大型输入文件(~600Mb)上:
$ wc input.txt.full
2674568 2674568 608825278 input.txt.full
我通过以下调整启动了vim:
vim -u NONE -n +'se nonu nowrap ul=-1 | syn off' input.txt.full
请注意
-u NONE
阻止执行初始化(用户)脚本和插件-n
禁用交换文件的写入(在慢/小磁盘上非常重要) se nonu nowrap ul=-1
禁用
undolevels
设置为负值)基本上,所有可能占用大量CPU或内存的东西
syn off
禁用语法高亮(如果语法高亮对文件类型有效,则应该有所不同)
现在,我想复制该行本身的每一行(全局:复制行,与之前的连接):
:g/^/t.|-j
不幸的是,文件对于可用内存来说会变得太大(~3Gb) 1 所以我选择了前20%(~535,000行):< / p>
:exec "norm 20%"|1,.g/^/t.|-j
这是一个“jiffy”,没有问题。手动导航(跳转,滚动,模式切换,搜索等)似乎都很敏感。
命令行基准:
$ xxd -c 44 /dev/urandom | head -n 3800000 > input.txt.full
$ wc input.txt.full
3800000 91820644 627000000 input.txt.full
$ time vim -u NONE -n +'se nonu nowrap ul=-1 | syn off' input.txt.full +'exec "norm 10%"|1,.g/^/t.|-j' +wq
real 0m7.778s
user 0m6.680s
sys 0m0.952s
$ wc input.txt.full
3800000 101002757 689940307 input.txt.full
(注意689940307 ÷ 627000000 = 110.03 %
,所以这是完全正确的)。
我的书中 并不慢 。为了进行比较,wc
调用本身 需要相同的时间 (7.7s)。
1 在tmpfs
上执行所有测试以避免缓存差异。
答案 1 :(得分:5)
问题更可能是vim不喜欢非常长的行。
首先尝试在文件中使用json_reformat
之类的工具......
如果您必须按原样编辑文件,请在:syntax off
相关文件之前尝试:set nowrap
和可能:edit
。
答案 2 :(得分:2)
虽然Vim在打开那个大小(或更大)的文件时没有问题,但是提到它有一个打开文件的问题,就像你的情况一样,只有一行(那个大小)。 / p>
您可以尝试各种解决方法,但我建议使用“正确工作的正确工具”方法,并尝试EmEditor,一个专门用于编辑大型文件的文本编辑器(以及其他内容)。 / p>
请注意,这不是Vim抨击,但Vim是一个主要用于编辑源代码的编辑器。这是一个很好的,但与其他工具一样,它有其局限性。