1
0
mirror of https://github.com/m00natic/vlfi.git synced 2024-10-05 18:30:51 +01:00
Go to file
2013-04-24 01:32:50 +03:00
README.org Use permanent buffer local write hook and update README. 2013-04-17 14:46:50 +03:00
vlfi.el Initial attempt at optimizing chunk access. 2013-04-24 01:32:50 +03:00

View Large Files Improved

An Emacs mode that allows viewing, editing and searching in large files in chunks. Batch size can be adjusted on the fly and bounds the memory that is to be used for operations on the file.

This mode builds on the bare bones GNU ELPA vlf.el. It adds the following improvements:

  • proper dealing with Unicode
  • regular expression search on whole file (in constant memory determined by current batch size)
  • chunk editing (if size has changed, saving is done in constant memory determined by current batch size)
  • occur like indexing
  • options to jump to beginning, end or arbitrary file chunk
  • ability to jump/insert given number of batches at once
  • newly added content is acknowledged if file has changed size meanwhile
  • automatic scrolling of batches
  • VLFI is added as an option when opening large files and given dired key-binding

GNU Emacs 23 and 24 are supported.

Overview and tips

M-x vlfi PATH-TO-FILE

Unicode

Emacs' Unicode support is leveraged so you'll not see bare bytes but characters decoded as if file is normally opened. This holds for editing, search and indexing.

Bignums

Regular Emacs integers are used, so if you have really huge file and Emacs doesn't have bignum support, VLFI will probably not quite work.

Memory control

vlfi-batch-size bounds the memory used for all operations.

Special mode

VLFI is derived from special-mode and keeps all its properties. For example you can directly press digits to enter prefix arguments.

Changing major mode

You can temporarily change major mode to whatever you like. Saving will insert contents as intended. You can return to vlfi-mode too.

Detail usage

Controlling batch size

+ and - control current batch size by factors of 2.

You can also set by hand local variable vlfi-batch-size and then refresh with g.

Move around

M-PgUp and M-PgDn move chunk by chunk. With positive prefix argument they move prefix number of batches. With negative - append prefix number of batches.

[ and ] take you to the beginning and end of file respectively.

j jumps to given chunk. To see where you are in file and how many chunks there are (using the current batch size), look at the bracketed part of the buffer name, batch size is also there - at the end.

Search whole file

s and r search forward and backward respectively over the whole file. This is done chunk by chunk so if you have really huge file - you'd better set somewhat bigger batch size beforehand.

l jumps to given line in file. This is done by searching from the beginning, so again the bigger current batch size, the quicker.

Edit

e enters VLFI in edit mode. If editing doesn't change size of the chunk, only this chunk is saved. Otherwise the remaining part of the file is adjusted chunk by chunk, so again you'd better have bigger current batch size. If chunk has been expanded the memory used is (batch size + difference to the original chunk size) x 2.

Occur over whole file

o builds index for given regular expression just like occur-mode. It does this chunk by chunk over the whole file. Note that even if you prematurely stop it with C-g, it will still show index of what's found so far.