让Vim在Windows上处理中等大小的文本文件?

时间:2012-11-14 17:23:46

标签: vim

我试图在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会在我的机器上窒息什么不是一个非常大的文件。

谢谢!

3 个答案:

答案 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是一个主要用于编辑源代码的编辑器。这是一个很好的,但与其他工具一样,它有其局限性。