14

In Emacs, how to comment a block of text, i.e. how to indent a block of text rightward by n whitespace characters and put a chosen character sequence, say ##, at the beginning of each line?

Original

foo
bar foobar
   foo bar

Desired:

# foo
# bar foobar
#    foo bar
  • I need a method that doesn't interfere with CUA mode.
  • comment-dwin doesn't allow me to choose arbitrary character sequence.
15

One way is to use string-rectangle (C-x r t).

Mark the block, then call string-rectangle and give ## as a string to insert.

3
  • 3
    Here are more concrete steps: 1) move cursor to beginning 2) C-M-@ 3) move cursor to end 4) C-x r t 5) type prefix character sequence, such as ## , press ENT – qazwsx Jan 18 '12 at 23:25
  • is it also possible to do the inverse? – mustISignUp May 13 '16 at 11:07
  • You can select a rectangle and delete it with C-x R K – Juancho May 13 '16 at 11:09
10

Depending on what mode you are running (e.g. CC Mode, Lisp Mode) you can select the region and then use the command comment-region (usually bound to C-c C-c. If everything is set correctly, it should use the appropriate comment characters for the type of file you are editing.

3
  • 9
    How is this different from M-;? – qazwsx Jan 19 '12 at 19:30
  • 4
    @duperuser M-; is a more general commenting command. When there is no active region, it inserts a comment (after any statements on the line, and lined up with the comment column). When a region is selected, it behaves like comment-region. When there is no active region, comment-region does not insert a comment. – jwernerny Jan 19 '12 at 19:43
  • Not only that, but comment-region, unlike comment-dwim (which is M-; by default) lets you flexibly nest and unnest block comments. Use plain C-u to unnest one level of nesting. (I bind C-x C-; to comment-region. Actually, I bind it to comment-region-lines from misc-cmds.el.) – Drew Mar 2 '17 at 18:24
7

You want to select the code region and then M-;

1
  • 2
    The best and simple emacs way answer. – Manoel Vilela Mar 8 '18 at 15:51

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.