Copy mode
Copy mode lets you select and copy text from a page without the mouse, with Vim's motions.
Copy some text
- Press v. A caret appears at the first text you can see, and the badge says
VISUAL. - Move the caret to where your text starts: j and k by line, w and b by word, or f and a character to jump to it on the line.
- Press v to start the selection, then move to extend it.
- Press y. The text is on the clipboard, and you are back in normal mode.
Esc leaves without copying. Selecting with the mouse works too: drag or double-click, then y copies, or the motions extend the selection.
Move the caret
| To | Press |
|---|---|
| A character left / right | h / l |
| A line down / up | j / k |
| A word forward / back / to its end | w / b / e |
| Start / end of the line | 0 / $ |
| Top / bottom of the page | gg / G |
| To a character on the line (forward / back) | f / F and the character |
| Start / end of the paragraph | { / } |
A number repeats a motion: 3w.
Select and copy
| To | Press |
|---|---|
| Start or drop a selection | v |
| Select whole lines | V |
| Select the word under the caret | iw |
| Copy and leave | y |
| Copy the whole lines and leave | Y |
Text inside a text field is not reachable from copy mode: click the field and select there as usual.
All the keys for this page
The default bindings, as Vimma's own ctrl+b ? overlay lists them. Name is the action's name, which you use to remap it or to run it as a : command. Every key is on the keys page.
Copy mode (31)
| Action | Keys | Name |
|---|---|---|
| Move caret left | hvisual | caret_left |
| Move caret down | jvisual | caret_down |
| Move caret up | kvisual | caret_up |
| Move caret right | lvisual | caret_right |
| Move caret a word forward | wvisual | caret_word_forward |
| Move caret a word back | bvisual | caret_word_backward |
| Move caret to the start of the line | 0visual | caret_line_start |
| Move caret to the end of the line | $visual | caret_line_end |
| Move caret to the top of the page | ggvisual | caret_top |
| Move caret to the bottom of the page | Gvisual | caret_bottom |
| Move caret to the end of the word | evisual | caret_word_end |
| Move caret to the previous word's end | gevisual | caret_prev_word_end |
| Move caret to the next WORD (by spaces) | Wvisual | caret_bigword_next |
| Move caret to the WORD's start | Bvisual | caret_bigword_back |
| Move caret to the end of the WORD | Evisual | caret_bigword_end |
| Move caret to the line's first non-blank | ^visual | caret_first_char |
| Move caret to the paragraph's start | {visual | caret_para_back |
| Move caret to the paragraph's end | }visual | caret_para_next |
| Find a character forward on the line | fvisual | caret_find_forward |
| Find a character backward on the line | Fvisual | caret_find_backward |
| Till a character forward on the line | tvisual | caret_till_forward |
| Till a character backward on the line | Tvisual | caret_till_backward |
| Repeat the last f, F, t or T | ;visual | caret_find_repeat |
| Repeat the last find, reversed | ,visual | caret_find_reverse |
| Start or drop a selection at the caret | vvisual | toggle_selection |
| Start or drop a line-wise selection | Vvisual | line_selection |
| Swap the selection's ends | ovisual | swap_selection_ends |
| Select the word at the caret | iwvisual | select_inner_word |
| Select the word at the caret and its spaces | awvisual | select_a_word |
| Copy selection and leave copy mode | yvisual | yank_selection |
| Copy the selection's whole lines and leave | Yvisual | yank_lines |
Details
Everything below is Vimma's own user guide for this topic, in full: every edge case and exception. You do not need it to get started.
v (or ctrl+b [, as in tmux) enters copy mode: a caret appears at the start of the first text you see, or at the selection if one is on screen, and the badge says VISUAL. It is Firefox's caret browsing (F7), for this page only, driven by Vim keys:
- **
h/lmove the caret a character,j/ka line,w/b** a word (Firefox's word steps:wstops at the end of a word), **0/$to the start / end of the line,gg/G** to the top / bottom of the page. The page scrolls to keep the caret in view. - **
egoes to the end of the word,geto the end of the previous one.W/B/E** are the same for WORDs, which only spaces delimit (beta.gammais one WORD). **^goes to the first non-blank character of the line,{/}** to the start / end of the paragraph (the next one from its edge). - **
f/Fand a character go to the next / previous one on the line, including it in the selection;t/Tstop just before it.;repeats the last of these,,** repeats it the other way. The line here is the text between line breaks, even if the page wraps it. - A count repeats any motion:
3e,5j,2f,. - **
v** starts a selection at the caret; the motions then extend it.vagain drops it and the caret moves on its own. **V** selects whole lines instead: the motions add lines, andVagain drops it (vkeeps the same text, character by character). **oswaps the ends, so the motions move the other one.iwselects the word at the caret,aw** the word and the spaces after it. - **
ycopies the selection to the clipboard as plain text, says "yanked 12 chars" and goes back to normal mode. With nothing selected it says "nothing to yank".Y** copies the whole lines the selection (or the caret) is on, then leaves the same way. - **
Esc** drops the selection and goes back to normal mode.
With the mouse. Selecting text with the mouse in normal mode (dragging, a double click for a word, a triple click for a paragraph, shift+click) enters copy mode with that selection: the badge says VISUAL, y copies it, the motions extend it (a double click on a word, then e, takes the next word too) and Esc clears it. A click that selects nothing stays in normal mode, and so do links, text fields (insert mode, as always), drag and drop, and a page that selects text by itself. Firefox's own copying keeps working in every mode and in each pane: ctrl+c, the context menu's Copy, and a middle click pasting the mouse selection.
The page gets none of these keys, nor any other plain key while copy mode is on; chords such as ctrl+c or ctrl+t still work. In a frame (an embedded video page, a comment widget) copy mode works once the frame has focus (click it first). Text inside a text field is not reachable: focus the field and use its own selection.
Known limits
Vimma is pre-alpha. What does not work yet, or works with a catch, is listed on the known limits page:
The guide at the top is written for this site; the details are built from Vimma's docs/guide.md and bindings.md at 1050bcc (2026-10-10).