Emacs:打开一个缓冲区,其中包含一个大文件中 X 到 Y 行之间的所有行

Ame*_*ina 10 emacs large-files

本着与另一个问题相同的精神:cat line X to line Y on a large file

有没有办法从 Emacs 中打开(并在缓冲区上显示)来自巨大文本文件的一组给定的行(例如 lineX和之间的所有行Y)?

例如,打开并在缓冲区中显示文件中第 57890000 行和 57890010 行之间的所有行 huge.txt

更新: 我对至少可以以只读方式打开行(仅用于显示目的)的解决方案感兴趣,尽管如果我也可以编辑行(并保存到原始文件)会很棒。

Gil*_*il' 7

如果要打开整个文件(需要 ),但在编辑器窗口中仅显示其中的一部分,请使用缩小。选择要处理的缓冲区部分,然后按C-x n n( narrow-to-region)。如果您收到有关禁用命令的提示,请说“是”。按C-x n w( widen) 再次查看整个缓冲区。如果您保存缓冲区,则会选择完整的文件:所有数据仍然存在,缩小范围只会限制您看到的内容。

如果要查看文件的一部分,可以shell-command使用前缀参数 ( M-1 M-!)将其插入当前缓冲区;运行适当的命令来提取所需的行,例如<huge.txt tail -n +57890001 | head -n 11

还有一个 Lisp 函数insert-file-contents可以接受一个字节范围。您可以使用M-:( eval-expression)调用它:

(insert-file-contents "huge.txt" nil 456789000 456791000)
Run Code Online (Sandbox Code Playgroud)

请注意,您可能会遇到整数大小限制(取决于版本和平台,请检查 的值most-positive-fixnum)。

理论上,可以编写一种 Emacs 模式,根据需要透明地加载和保存部分文件(尽管整数大小的限制会使在 32 位机器上无法使用实际文件偏移量)。我所知道的在这个方向上的唯一努力是VLF这里是GitHub 链接)。