Emacs

Emacs:打開一個緩衝區,其中包含來自大文件的 X 到 Y 行之間的所有行

  • May 28, 2014

本著與其他問題相同的精神:cat line X to line Y on a huge file

有沒有辦法從一個巨大的文本文件中從 Emacs中打開(並在緩衝區上顯示)一組給定的行(例如 lineX和之間的所有行)?Y

例如,打開並在緩衝區中顯示文件中第 57890000 行和第 57890010 行之間的所有行huge.txt

更新: 我對至少可以以只讀方式打開行(僅用於顯示目的)的解決方案感興趣,儘管如果我也可以編輯行(並保存到原始文件)會很棒。

如果您想打開整個文件(需要 ),但在編輯器視窗中只顯示其中的一部分,請使用narrowing。選擇要處理的緩衝區部分,然後按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)

請注意,您可能會遇到整數大小限制(取決於版本和平台,請檢查 的值most-positive-fixnum)。

理論上,可以編寫一個 Emacs 模式,根據需要透明地載入和保存文件的一部分(儘管整數大小的限制使得在 32 位機器上無法使用實際的文件偏移量)。我所知道的唯一朝著這個方向努力的是VLF (此處為GitHub 連結)。

引用自:https://unix.stackexchange.com/questions/47513