2024-10-15 Productivity

Vim Motion Series 5: Copy and Paste in Vim

By O. Wolfson

Welcome to another part of our Vim Motion series! In this article, we’ll cover the essential commands and techniques for copy-paste operations in Vim, including advanced ways to manage text replacement without losing your clipboard content. By the end of this guide, you’ll have the skills to efficiently copy, paste, and replace text, ensuring you maintain control over your clipboard.

Basics: Copy, Cut, and Paste

In Vim, copying is called yanking and is performed with the y key, while cutting is done with the d (delete) key. Here are the basic commands:

  • yy: Yank (copy) the current line.
  • p: Paste the yanked or deleted text after the cursor.
  • P: Paste the yanked or deleted text before the cursor.
  • dd: Delete (cut) the current line and store it in the clipboard.

How to Copy and Replace Text Without Losing Your Clipboard

Replacing text in Vim can sometimes overwrite your clipboard (default register), making it unavailable for pasting. Here are two essential methods to avoid this issue.

Solution 1: Copy into a Named Register

Named registers in Vim are like dedicated clipboards where you can store text and retrieve it later without interfering with your default clipboard.

  • Yank into Register a:

    vim
    "ay
    

    This copies the selected text into register a.

  • Paste from Register a:

    vim
    "ap
    

    This pastes the content from register a, leaving the default clipboard untouched.

Solution 2: Use the Black Hole Register

The black hole register (_) discards any text sent to it, so your clipboard remains untouched. This is useful when replacing text without affecting what you've already copied.

  • Delete to the Black Hole Register:

    vim
    "_dw
    

    This deletes the word under the cursor and sends it to the black hole register, leaving your clipboard intact.

Practical Exercise: Copy and Replace

Let’s practice copying, pasting, and replacing text using registers and the black hole register. Open a new file:

bash
vim copy_practice.txt

Copy this text into your file:

text
1. Copy this line into register 'a' using "ayy.

2. Move to another part of the file and paste the line from register 'a' using "ap.

3. Replace the word 'line' with 'sentence' but use the black hole register to avoid losing your clipboard content useing "_ciw.

4. Finally, try copying lines into register 'b' using "by and paste them elsewhere with "bp.

copy this line with "ayy.

copy these lines with "byy.
Lorem ipsum dolor sit amet, consectetur adipiscing elit.

copy this line with "cyy.

By mastering the use of named registers and the black hole register, you’ll be able to efficiently copy, paste, and replace text in Vim without losing your clipboard content. Keep practicing these techniques to improve your workflow, and stay tuned for more advanced tips in the next article!