How can I select or highlight a block in Emacs?

EmacsSelectionHighlight

Emacs Problem Overview


I want to select or highlight a block in Emacs without using the mouse, but doing it from the keyboard like Vim's visual mode. What is the easiest way to do this from a keyboard?

Emacs Solutions


Solution 1 - Emacs

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 - Emacs

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

Emacs 24.4 now has rectangle-mark-mode. Use Ctrl + X, Space to invoke it.

Solution 4 - Emacs

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.

Solution 5 - Emacs

Use Control-Space to set a mark and move your cursor.

The transient-mark-mode will highlight selections for you. M-x transient-mark-mode.

You can setup Emacs to enable this mode by default using a customization. M-x customize-option RET transient-mark-mode.

Solution 6 - Emacs

... and in case you are using Ubuntu and Ctrl + space is not working for you: you need to clear the Intelligent Input Bus (IBus) "next input method" key binding, as in

> run ibus-setup and change the key binding for > "next input method" to something else (or delete it entirely by > clicking the "..." button and then the "Delete" button).

The quote is taken from an answer to a Stack Overflow question.

Solution 7 - Emacs

To expand answer of Edin Salkovic, if you use CUA mode, you can use Ctrl + Enter to begin a visual block selection. There are plenty of shortcuts to control block selection described in the documentation of CUA.

Solution 8 - Emacs

With Emacs 25, simply press Ctrl + Space and then move your cursor wherever you want to highlight/select the region of text which interests you. After that, you may need these commands:

  • Ctrl + W for cutting.
  • Alt + W for copying.
  • Ctrl + Y for pasting.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsystemsfaultView Question on Stackoverflow
Solution 1 - EmacsSvanteView Answer on Stackoverflow
Solution 2 - EmacsMarkoView Answer on Stackoverflow
Solution 3 - EmacsChristopher M. HobbsView Answer on Stackoverflow
Solution 4 - EmacsMicah ElliottView Answer on Stackoverflow
Solution 5 - EmacsremveeView Answer on Stackoverflow
Solution 6 - Emacsserv-incView Answer on Stackoverflow
Solution 7 - EmacsJérôme PouillerView Answer on Stackoverflow
Solution 8 - EmacsBillal BegueradjView Answer on Stackoverflow