Luigi Tiburzi
Luigi Tiburzi

Reputation: 4325

Emacs interactive regex replacement

Suppose You have some text with words like these inside:

"foo" ... "bar" ... "file" ... "emacs"

and all you want to do is to replace " with ' '. I know it can be done only asking for the following replacement:

" -> ''

but suppose you would like to do it interactively and with regex, for more complicated case, how can it be done?

I explain myself better: I wish I could have a command, or a series of them, to work in this way:

Upvotes: 21

Views: 5955

Answers (3)

Ian Mackinnon
Ian Mackinnon

Reputation: 14238

  • Run M-x isearch-forward-regexp or C-M-s.

  • As you start typing a regex the first occurrence will be instantly highlighted. Attempting to move back through the regex using the cursor will cancel the search, so if you make a mistake you should use M-e to allow editing, make the change, then hit enter to continue the search.

  • When you're happy with the regex, press M-%, type a replacement string (or use the up key to access previously used replacement strings), then press RET to start interactive replacement.

  • For each occurrence, press y to replace once, n to skip, ! to replace all, RET to exit, or ? to see further options.

  • To repeat your last regexp search enter C-M-s then C-s.

Full details are in the manual page.

Upvotes: 8

Luigi Tiburzi
Luigi Tiburzi

Reputation: 4325

Finally I've found out!!!!! These are the steps to follow:

  • M-x isearch-forward-regexp

  • Insert your regex interactively. If you make a mistake you can use DEL or M-e and navigate through your regex to correct it.

  • Then after you've found what you want immediately press M-% and the replacement you like and start replacing.

So you can search and replace with regex in a total interactive and incremental fashion.

Upvotes: 25

High Performance Mark
High Performance Mark

Reputation: 78316

Does the command query-replace-regexp satisfy your requirements ? On most installations of Emacs it will be bound to C-M-%.

Since that doesn't satisfy OP's requirements, suggest looking also at re-builder. This function is not documented in the Emacs manual, or help system, it is just about documented in the Emacs Lisp manual.

Upvotes: 7

Related Questions