Emacs has a flexible tool, align-regexp
, for aligning text but it is surprisingly fiddly to use. For example to align a section of text like this:
the quick brown fox jumped over the lazy dogs the quick brown
into columns like this:
the quick brown fox jumped over the lazy dogs the quick brown
you would highlight the text and use C-u M-x align-regexp \(\s-*\)\s- RET 1 RET 0 RET y
. See what I mean!
The function is of course documented (use C-h f align-regexp
to read it), but I found it a bit hard to follow. The \(\s-*\)\s-
string is the regular expression that is used to align on, and the final \s-
in that string tells emacs to align on a whitespace character. You could replace that with e.g. &
to align on &
characters. The other three options (i) control how the columns are justified (generally can leave this as 1); (ii) add spaces between columns; and (iii) repeat the alignment throughout the line.
To make life easier, I wrote a couple of simple wrappers around align-regexp
for common tasks. The first aligns on whitespace, and the second aligns on &
(useful for LaTeX tables).
(defun bjm/align-whitespace (start end) "Align columns by whitespace" (interactive "r") (align-regexp start end "\\(\\s-*\\)\\s-" 1 0 t)) (defun bjm/align-& (start end) "Align columns by ampersand" (interactive "r") (align-regexp start end "\\(\\s-*\\)&" 1 1 t))