很可能是使 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
注意这个
现在,我想复制行本身的每一行(全局:复制行,与上一个连接):
:g/^/t.|-j
不幸的是,文件对于可用内存 (~3Gb) 1来说太大了,所以我选择对前 20%(~535,000 行)采取行动:
:exec "norm 20%"|1,.g/^/t.|-j
这可以“快速”工作并且没有问题。手动导航(跳跃、滚动、模式切换、搜索等)似乎反应灵敏。
命令行基准:
$ 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
以避免缓存差异。