Text manialations is one aspect Emacs is especially good at, and it
has a variety of tools to help you. Massaging text files for further
processing or extracting pertinent information from log files are both
common things to do in Emacs.
Editable Occur
I introduced M-x occur in Occur(M-s o in helm): Print lines matching
an expression as a way of collating all lines that match a certain
pattern.
You can typing e begin to edit, and after you finish, C-c C-c to
commit the changes to their original lines, it is especially great for
keyboard macros and search & replace.
Deleting Duplicates
By default, M-x delete-duplicate-lines deletes the first dupli- cate
line it encounters, starting from the top. With a single universal
argument, it starts from the bottom and therefore deletes the last.
Without |
Delete first duplicate line |
C-u |
Delete last duplicate line |
C-u C-u |
Delte only adjacent duplicates |
C-u C-u C-u |
Does not delete adjacent blank lines |
Flushing and Keeping Lines
Sometimes you want to filter lines in a region by a pattern; whether
that is to flush lines that match a pattern, or keep the ones that
do.
Both commands act on the active region so it is common – if you want
to do this on a whole buffer - to call C-x h to select the entire buffer
first.
M-x flush-lines |
Flushes (deletes) all lines in a region that match a pattern |
M-x keep-lines |
Keeps all lines in a region that match a pattern and removes all
non-matches |
Keeping lines that match a pattern is useful for large log files then
you want to.
Joining and Splitting Lines
Unlike the kill commands that act on lines
(C-M-<backspace>
and C-k), these commands won’t alter
your kill ring. They are also more specialized, as they insert or remove
lines with- out moving your point.
C-o |
Inserts a blank line after point |
C-x C-o |
Deletes all blank lines after point |
C-M-o |
Splits a line after point, keeping the indentation |
M-ˆ |
Joins the line the point is on with the one above |
Whitespace Commands
Managing whitespace is an issue that recurs often when you yank text
from elsewhere or if you work with languages where whitespace is
significant.
M-SPC |
Deletes all but I space or tab to the left and right of the
point |
M-x cycle-spacing |
As above but cycles through all but one, all, and undo |
M-\ |
Deletes all spaces and tabs around the point |
M-SPC is useful as it trims all whitespace, to the left or right of
the point, to a single whitespace character. ving none. M-x
cycle-spacing cycles between leaving one, leaving none, and restoring
the original spacing.