How to Copy and Paste in Emacs

Emacs, or GNU Emacs, is one of many popular text editors on Linux and other computer platforms. Along with vi or vim, these Linux text editors offer many advanced features that can improve the efficiency and abilities of the editor far beyond simple typing. Also, these text editors can be run in a console without a graphical user interface.

Unfortunately, along with the additional features come a great deal of complexity. Suddenly, simple tasks like copying and pasting are no longer clear and obvious. In these text editors, keyboard shortcuts have largely replaced menus and mouse functions. So for those not used to working in a console or terminal, the Emacs learning curve can be especially steep.

If you just want to know how to copy and paste and then get on with your life, the short answer below provides exactly what you need. But if you are curious about the mechanics of Emacs and the deal with all of this "killing" and "yanking", read on for a bit more detail.

Source

The Short Answer - Copy and Paste

1. Move cursor to beginning of text and set a mark:

[ctrl-spacebar]

2a. Move cursor to end of desired text and cut (kill):

[ctrl-w]

2b. If only copying, immediately paste (yank)***:

[ctrl-y]

3. Move cursor to new location and paste (yank):

[ctrl-y] 

*** Note: If you know you will only be copying, 2a. and 2b. can be combined into:

[alt-w] OR [Esc][w]

Source

The Long Answer - Copy and Paste

Emacs doesn't technically have the commands copy and paste that have become popularized by other text editors. Instead, the Emacs text editor uses something called the "kill ring" to save removed text, and gives an option to "yank" it back into the current or any other document. The combined kill and yank process can effectively mimic copy and paste in Emacs, but it offers some additional features as well.

Killing Vs. Deleting

Killing text and deleting text both remove it from the given text file. However, they vary in how the text can be used afterwards. Killing generally occurs when any large, non-trivial amount of text is removed. As opposed to deleting which occurs most commonly with single characters or white space. Killing text will automatically store it in the kill ring, allowing the text to later be yanked back into the current or any other buffer. Deleting is generally a permanent operation with the exception of being able to undo.

Kill Commands

There are many many Emacs commands for killing various amounts of text such as words, sentences, lines, and regions. The [ctrl-w] mentioned above kills a region as defined by a starting mark. Other useful commands include:

Description
Command
Kill Word
[alt-d]
Kill Rest of Line
[ctrl-k]
Kill Whole Line
[ctrl-S-backspace]
Kill Rest of Sentence
[alt-k]

Yanking

Once text has been moved to the kill ring, it can be yanked back into any buffer or file. Emacs doesn't just store the most recently killed text, but a large number of blocks as defined by the variable kill-ring-max. The short answer above used [ctrl-y] to yank the most recent text back from the kill ring. If you want to yank a previously killed piece of text, first use [ctrl-y] to yank the most recent text, then repeatedly use [alt-y] to swap out the other text in the kill ring. To view the entire kill ring history, the Emacs command [ctrl-h] v kill-ring will show all killed text.

Comments 4 comments

amalloy profile image

amalloy 5 years ago from Los Angeles

Nice. I've been using Emacs for months, and in fact wrote a hub about it today, but I didn't know about C-S-backspace; I've been faking it with C-a C-k C-k. Actually, I can't make C-S-backspace work - are you sure that's right?


LoganG profile image

LoganG 5 years ago from Florida Author

Thanks for the note amalloy! I went back and checked the emacs manual and I'm certain it is correct, BUT the manual points out that "many character terminals will prevent you from typing the key sequence C-S-backspace." Honestly I'm not sure which terminals would let you.

Another option would be to define your own key sequence to call the emacs command "kill-whole-line" which is what C-S-backspace was supposed to do.

Hope that helps!


amalloy profile image

amalloy 5 years ago from Los Angeles

Yep, thanks, I went ahead and bound C-M-backspace to it. It turns out C-S-backspace was working fine but I was so unused to C-S-anything that I was typing C-M instead, so the rebinding is a good idea :)


LoganG profile image

LoganG 5 years ago from Florida Author

amalloy, Glad that worked out for you!

    Sign in or sign up and post using a HubPages Network account.

    0 of 8192 characters used
    Post Comment

    No HTML is allowed in comments, but URLs will be hyperlinked. Comments are not for promoting your articles or other sites.


    More by this Author


    Click to Rate This Article
    working