gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:20:12 24 4
gpt4 key购买 nike

我试图在 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 会在我的机器上因不是真正如此大的文件而窒息。

谢谢!

最佳答案

大多数 可能是语法插件导致 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 行)采取行动:
    :exec "norm 20%"|1,.g/^/t.|-j

    这适用于“瞬间”并且没有问题。手动导航(跳转、滚动、模式切换、搜索等)似乎 react 灵敏。

    命令行基准:
    $ 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.7 秒)。

    1 所有测试都在 tmpfs 上执行以避免缓存差异。

    关于vim - 让 Vim 在 Windows 上处理中等大小的文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13383915/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com