I have a bunch of single line comment blocks in C-code that I want to change to multiline. Example:
// foo
// bar
should become:
/* foo
* bar
*/
How can I do this easily in Emacs?
Emacs Stack Exchange is a question and answer site for those using, extending or developing Emacs. It only takes a minute to sign up.
Sign up to join this communityTry this:
(defun ph/switch-inline-c-comments-to-block (beg end)
"Change whole-line inline C comments between BEG and END to block comments.
If the region contains any lines which are not whole-line inline C comments
then the behavior of this command is undefined."
(interactive "*r")
(narrow-to-region beg end)
(unwind-protect
(let ((whole-line-inline-comment "^[[:space:]]*//\\(.*\\)$"))
(goto-char (point-min))
(replace-regexp whole-line-inline-comment "/*\\1" nil (point)
(line-end-position))
(forward-line)
(replace-regexp whole-line-inline-comment " *\\1")
(when (eolp)
(open-line 1)
(forward-line))
(insert " */"))
(widen)))
To use it, first evaluate the defun, then mark the sequence of whole-line inline comments you want to change to a K&R-style comment and execute M-x ph/switch-inline-c-comments-to-block RET
(or bind it to a key of your choice).