我试图在Windows上的gvim中打开一个200MB的文本文件,这很令人窒息.vim窗口打开,只是保持空白且无响应.我的系统有8GB的RAM,使用记事本在大约2-5秒内打开文件.
我发现这篇关于在vim中编辑非常大的文本文件的帖子,我尝试在关闭插件的情况下打开文件:
vim -u "NONE" my200MBfile.text
Run Code Online (Sandbox Code Playgroud)
但这没有帮助.还有什么我可以做的才能让它发挥作用吗?看起来很奇怪vim会在我的机器上窒息什么不是真正的大文件.
谢谢!
最有可能它的语法插件,它VIM停止.我对Mbs-Gbs文件没有任何问题.除非我不小心打开了一些 - 不那么乖的 - 文件类型.
加载/挂起时按^ C(中断插件)
:syntax off
Run Code Online (Sandbox Code Playgroud)
诀窍.还有其他语法选项可以更轻松地处理文件,而无需完全"同步"语法突出显示
我更多地玩了这个,我发现我的一些插件确实会对(非常)大文件进行操作非常慢.为了好玩,我这样做了:
在一个大的输入文件(~600Mb):
$ wc input.txt.full
2674568 2674568 608825278 input.txt.full
Run Code Online (Sandbox Code Playgroud)
我通过以下调整启动了vim:
vim -u NONE -n +'se nonu nowrap ul=-1 | syn off' input.txt.full
Run Code Online (Sandbox Code Playgroud)
请注意这一点
-u NONE 防止执行初始化(用户)脚本和插件-n 禁用swapfiles的写入(在慢/小磁盘上非常重要)se nonu nowrap ul=-1 禁用
undolevels为负值)基本上,所有可能需要大量CPU或内存的东西
syn off 禁用语法高亮(如果语法高亮对文件类型有效,则应该有所不同)
现在,我想复制该行本身的每一行(全局:复制行,与之前的连接):
:g/^/t.|-j
Run Code Online (Sandbox Code Playgroud)
不幸的是,文件对于可用内存(~3Gb)1会变得太大,所以我选择在前20%(~535,000行)上执行操作:
:exec "norm 20%"|1,.g/^/t.|-j
Run Code Online (Sandbox Code Playgroud)
这工作在一个"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
Run Code Online (Sandbox Code Playgroud)
(注意689940307 ÷ 627000000 = 110.03 %,这是完全正确的).
这在我的书中并不慢.为了进行比较,wc调用本身 需要相同的时间(7.7s).
1执行所有测试tmpfs以避免缓存差异.
问题更可能是vim不喜欢非常长的行.
首先尝试使用json_reformat文件中的工具...
如果您必须按原样编辑文件,请尝试:syntax off并可能:set nowrap在您遇到:edit相关文件之前.