Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Appending characters to the end of each line in Emacs

Tags:

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.

like image 731
ZelluX Avatar asked Feb 02 '11 04:02

ZelluX


2 Answers

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

like image 53
nelhage Avatar answered Oct 31 '22 05:10

nelhage


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)))
like image 30
Trey Jackson Avatar answered Oct 31 '22 06:10

Trey Jackson