How to select or highlight a block in Emacs?

Solution 1:

If I understand the question correctly, it is not about rectangular regions originally.

C-Spc puts a mark at the current position.

Wherever your cursor is afterwards, the text between the last mark and the current position is "selected" (you can highlight this by activating transient-mark-mode, but this will also mean that marks have to be deleted when you don't want highlight).

You can operate on that region with commands like:

C-w . . Kill region. This deletes and puts the region into the kill ring.
C-y . . Yank. This inserts the last snippet from the kill ring.
M-y . . Cycle kill ring. Immediately after C-y, this replaces the yanked part by the other snippets in the kill ring.
M-w . . Save region into kill ring. Like C-w, but doesn't delete.

This is just the basic usage. Marks have other uses, too. I recommend the tutorial (C-h t).

Solution 2:

Take a look at region-rectangle in emacs.

In short, you start selection like usual with Control-Space, then kill region with Control-x r k and paste (or yank) killed block with Control-x r y.

Solution 3:

Emacs 24.4 now has rectangle-mark-mode. C-x space to invoke it.

Solution 4:

See the article: "Working with rectangular selections", especially the comments section. See also the section of CUA mode documentation titled "CUA rectangle support". There's also a nice video on vimeo.

Solution 5:

Although C-SPC is a common way to start marking something from wherever your point is, there are often quicker/easier ways that don't involve explicitly moving to start/end points...

Built-in selection shortcuts

  • M-h — an important means to mark a paragraph. A "paragraph" often means a block of code.

  • C-M-h and C-M-@ — for marking sexps and defuns, respectively. This works for several languages, not just lisps.

  • hold down shift — another slick way to highlight during movement. E.g., M-S-f selects forward a whole word. This is shift-select-mode, and it is enabled by default in Emacs 24+. On some (non-chiclet) keyboards, you should be able to hold down C-S- with a single pinky.

You can press any of these repeatedly to grow the selection.

There are also a few special ways to mark things:

  • C-x hmark the whole buffer

  • C-x SPC — enter rectangle mark mode

(NOTE: use C-g often to cancel marking while experimenting.)

Add-ons

There are a few add-on packages that improve selecting regions and things. These are all play nicely together and fit different use cases. Use them all!

  • expand-region: Expand region increases the selected region by semantic units. Just keep pressing the key until it selects what you want. C-= is a recommended binding for it. Hit it a few times to get what you need.

  • easy-kill: Use M-w and a mnemonic to select different types of things, like words, sexps, lists, etc.

  • zop-to-char: Like zap-to-char, but provides nice selection and other menu-driven actions.

  • diff-hl: Highlight uncommitted changed regions. Use diff-hl-mark-hunk to select/mark a hunk.

  • symbol-overlay: Select symbol at point with a keystroke (M-i). Then you can do other things with it, like copy, search, jump, replace, etc.