Appending characters to the end of each line in Emacs

Assume I have a text file with content

1
123
12
12345

If I want to add an 'a' in the beginning of each line I can simply use string-rectangle (C-x r t), but what if I want to append an 'a' to the end of each line, after which the file should become

1a
123a
12a
12345a

Thanks.


Solution 1:

You could use replace-regexp for this purpose, with the $ regexp metacharacter that matches end-of-line. Go to the start of the buffer, and then do M-x replace-regexp, and answer $ and (your text) to the two prompts.

Or, in emacs-speak, for your specific example of adding a:

M-< M-x replace-regexp RET $ RET a RET

Solution 2:

Emacs keyboard macros are your friend.

C-x ( C-e a C-n C-x )

Which just sets up the keyboard macro by: starting the keyboard macro (C-x (), go to the end of the line (C-e), insert an a, go to the next line (C-n), and then end the macro recording (C-x )).

Now you can either execute it (C-x e), and keep pressing e for each line you want to have it run on, or you can run it on a region with C-x C-k r.

If you do this a lot, you can save the macro, or you can write a function. This would be one such function:

(defun add-string-to-end-of-lines-in-region (str b e)
  "prompt for string, add it to end of lines in the region"
  (interactive "sWhat shall we append? \nr")
  (goto-char e)
  (forward-line -1)
  (while (> (point) b)
    (end-of-line)
    (insert str)
    (forward-line -1)))