使用VIM中的大文件

hoj*_*oju 106 vim large-files

我尝试在VIM中打开一个巨大的(~2GB)文件但是它很窒息.我实际上不需要编辑文件,只是有效地跳转.

如何在VIM中处理非常大的文件?

Flo*_*ian 84

我今天有一个12GB的文件要编辑.vim LargeFile插件对我不起作用.它仍然耗尽了我所有的记忆,然后打印了一条错误信息:-(.我也不能使用hexedit,因为它不能插入任何东西,只是覆盖.这是另一种方法:

您拆分文件,编辑部件然后重新组合.你仍然需要两倍的磁盘空间.

  • Grep用于您想要编辑的行周围的内容:

    grep -n 'something' HUGEFILE | head -n 1
    
    Run Code Online (Sandbox Code Playgroud)
  • 提取该文件的范围.假设您要编辑的行位于第4行和第5行.然后执行:

    sed -n -e '4,5p' -e '5q' HUGEFILE > SMALLPART
    
    Run Code Online (Sandbox Code Playgroud)
    • -n选项需要禁止sed的默认行为来打印所有内容
    • 4,5p 打印第4和第5行
    • 5q 处理第5行后中止sed
  • 编辑SMALLPART使用您喜欢的编辑器.

  • 合并文件:

    (head -n 3 HUGEFILE; cat SMALLPART; sed -e '1,5d' HUGEFILE) > HUGEFILE.new 
    
    Run Code Online (Sandbox Code Playgroud)
    • 即:从HUGEFILE(在这种情况下是前3行)中选择编辑行之前的所有行,将其与编辑的行(在本例中为第4行和第5行)组合,并使用这组合的行来替换在HUGEFILE中等效(在这种情况下是前5行)并将其全部写入新文件.

    HUGEFILE.new现在将是您编辑的文件,您可以删除原始文件HUGEFILE.


Jim*_*nis 30

多年来,这一直是一个反复出现的问题.(数字不断变化,但概念是一样的:如何查看或编辑大于内存的文件?)

显然more或者less仅仅是阅读文件的好方法 - less甚至提供vi类似于滚动和搜索的键绑定.

一个Freshmeat站点上的"大文件"的搜索表明,两位编辑将特别适合您的需求.

一个是:lfhex ...一个大文件十六进制编辑器(取决于Qt).显然,那个需要使用GUI.

另一个似乎适合控制台使用:hed ...它声称有一个类似vim的界面(包括ex模式?).

我确信我已经看到其他Linux/UNIX编辑器能够翻页文件而无需将其全部内容加载到内存中.但是,我不记得他们的任何名字.我正在将此回复作为"wiki"条目,以鼓励其他人将其链接添加到此类编辑器.(是的,我熟悉使用split和处理问题的方法cat;但我正在考虑编辑器,尤其是控制台/ curses编辑器,它们可以免除这些并节省我们这些方法所需的时间/延迟和磁盘空间开销) .


Chs*_*y76 21

由于您不需要实际编辑文件:

  1. view(或vim -R)应该在大文件上合理地工作.
  2. 或者你可以使用moreless

  • vim与"-R"仍然窒息.少即是个好主意. (3认同)

B T*_*B T 8

我根据Florian的回答写了一个小脚本,使用nano(我最喜欢的编辑器):

#!/bin/sh

if [ "$#" -ne 3 ]; then
  echo "Usage: $0 hugeFilePath startLine endLine" >&2
  exit 1
fi

sed -n -e $2','$3'p' -e $3'q' $1 > hfnano_temporary_file
nano hfnano_temporary_file
(head -n `expr $2 - 1` $1; cat hfnano_temporary_file; sed -e '1,'$3'd' $1) > hfnano_temporary_file2
cat hfnano_temporary_file2 > $1
rm hfnano_temporary_file hfnano_temporary_file2
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

sh hfnano yourHugeFile 3 8
Run Code Online (Sandbox Code Playgroud)

在该示例中,nano将打开第3到第8行,您可以编辑它们,当您保存并退出时,hugefile中的这些行将自动被您保存的行覆盖.


And*_*oss 1

emacs 可以很好地处理 100 兆字节的文件,我已经在日志文件上使用过它,没有遇到太多麻烦。

但一般来说,当我有某种分析任务时,我发现编写 Perl 脚本是更好的选择。