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
andC-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 isshift-select-mode
, and it is enabled by default in Emacs 24+. On some (non-chiclet) keyboards, you should be able to hold downC-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 h
— mark 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.