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.new现在将是您编辑的文件,您可以删除原始文件HUGEFILE.
Jim*_*nis 30
多年来,这一直是一个反复出现的问题.(数字不断变化,但概念是一样的:如何查看或编辑大于内存的文件?)
显然more或者less仅仅是阅读文件的好方法 - less甚至提供vi类似于滚动和搜索的键绑定.
一个Freshmeat站点上的"大文件"的搜索表明,两位编辑将特别适合您的需求.
一个是:lfhex ...一个大文件十六进制编辑器(取决于Qt).显然,那个需要使用GUI.
另一个似乎适合控制台使用:hed ...它声称有一个类似vim的界面(包括ex模式?).
我确信我已经看到其他Linux/UNIX编辑器能够翻页文件而无需将其全部内容加载到内存中.但是,我不记得他们的任何名字.我正在将此回复作为"wiki"条目,以鼓励其他人将其链接添加到此类编辑器.(是的,我熟悉使用split和处理问题的方法cat;但我正在考虑编辑器,尤其是控制台/ curses编辑器,它们可以免除这些并节省我们这些方法所需的时间/延迟和磁盘空间开销) .
我根据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中的这些行将自动被您保存的行覆盖.