2

I'm having trouble getting query-regex-replace to do what I want. I've read the docs several times and still can't figure it out. Here are a few examples of things I can't figure out how to do with query-regex-replace:

  1. Replace a bunch of whitespace on one line followed by "*" with just "*" (get rid of the whitespace.

EDIT - I got this to work with [[:space:]]+\* RET * RET

  1. Replace two forward slashes followed by non white space with two forward slashes and white space (insert a space before the first non white space character).

EDIT - I also got this to work with //\([^[:space:]]+\) RET // \1

  1. Get rid of blank lines (optionally of course because this is a query replace).

EDIT - I still cannot get this to work. Among other things, I tried these:

)[[:space:]]+{ RET ) { RET

and

)\s-+{ RET ) { RET

Thanks for any help.

  • 2
    Please show an example line and the regex you tried. – Dan Oct 2 '16 at 3:37
  • I'm new to this forum format. Should I edit the original post or put the examples here? Also, I'm sure I tried at least five things for #1 above. Should I just put the most straightforward attempt? – Andrew Voelkel Oct 2 '16 at 17:10
  • Yes, edit the original post. Please show the regex expressions you tried. – Dan Oct 2 '16 at 17:43
  • 2
    Depending on what you're trying to do, there are a few options that may be more efficient than query-replace-regexp. Check out whitespace-cleanup for (1), comment-dwim for (2), and delete-blank-lines for (3). Unless you're batch cleaning up files, the options I suggested should be a better fit. – Tianxiang Xiong Oct 3 '16 at 5:51
  • Love that C-x C-o to delete blank lines. Thanks for the link @Tianxiang Xiong – Prasanna Oct 4 '16 at 8:07
3

To replace space and/or tab sequence followed by an asterisk to just an asterisk:

[ LiteralTabHere]+\*
*

That LiteralTabHere should be a literal tab char. Enter it by pressing C-q C-i.

You need the backslash before asterisk. Because the asterisk is a meta char, it means 0 or more items.

To insert a space before the first non-white-space character after 2 slashes:

//\([[:graph:]]+\)
// \1

To remove blank lines

\n\n\n+
\n\n

Each \n must be a literal return. To insert literal return, press C-q C-j.

  • Shouldn't it be C-q C-j? For me, C-q RET gives a carriage return (like \r), not a newline (\n). – npostavs Oct 3 '16 at 21:57
  • @npostavs you are right! Correcting it. Thanks. – Xah Lee Oct 3 '16 at 22:46
  • To remove blank lines one may also use M-x flush-lines and when it prompts Flush lines containing match for regexp Enter $ and hit Return key – Prasanna Oct 4 '16 at 8:04
  • @Prasanna you mean with ^$. That flush all blank lines, sometimes one wants multiple blank lines collapsed to just one. – Xah Lee Oct 4 '16 at 23:48
  • This is all great stuff. Thanks much. I am still having problems with replacement involving newlines. For instance, to replace ")" followed by blank space (including newlines) followed by "{" with ") {", I tried: ")[ \t\n]+{" ") {" It didn't work. – Andrew Voelkel Oct 5 '16 at 1:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.