> For the complete documentation index, see [llms.txt](/llms.txt).
> Markdown versions of each page are available by appending .md to any URL.

# Code Editor Vim Keybindings

Use Vim keybindings in Warp's code editor for keyboard-driven navigation and editing.

Warp's built-in code editor supports native Vim keybindings for keyboard-driven navigation and editing. Enable Vim mode to use familiar motions, text objects, visual mode, registers, and editing commands directly in Warp without switching to an external editor.

## About Vim keybindings

The Vi family of programs (including Vim and Neovim) are modal text editors that allow for keyboard-driven text editing. Vi-style keybindings are especially popular among developers for their speed and precision in navigating and manipulating code. Warp’s [code editor](/code/code-editor/) now includes native support for Vim keybindings (also known as Vim mode), offering a familiar editing experience directly within your coding workflows.

### How to enable Vim keybindings

Vim mode in the code editor uses the same setting toggle as the input editor. To enable:

-   Through the [Command Palette](/terminal/command-palette/), search for "Vim Keybindings".
-   Through **Settings** > **Features** > **Text Editing**, toggle "Edit code and commands with Vim keybindings".

Unlike the input editor, the Vim implementation in the code editor starts in Normal mode.

### Customizing keybindings

At the moment, Warp only supports default Vim keybindings.

One exception is the keyboard shortcut for exiting insert mode, which can be rebound under **Settings** > **Keyboard shortcuts** > **Exit Vim Insert Mode**, or through the [Command Palette](/terminal/command-palette/) search for "Exit Vim Insert Mode".

## Supported keybindings

Below is a list of the vim functionality implemented in Warp so far.

### Movement

See [Vim docs: motion](https://vimdoc.sourceforge.net/htmldoc/motion.html) for more information.

#### Basic

| Command(s) | Description | | ---------------------------- | --------------------------------------------------- | | `h`, `j`, `k`, `l` | single-char movement | | `<space>`, `<backspace>` | single-char movement with line wrap | | `w`, `W`, `b`, `B`, `e`, `E` | word movement | | `ge`, `gE` | end of previous word | | `$` | end of line | | `0` | beginning of line | | `^` | first non-whitespace character of line | | `%` | jump to matching bracket | | `[`, `]` | prev/next unmatched bracket | | `_` | beginning of the current line | | `+` | first non-whitespace character of the next line | | `-` | first non-whitespace character of the previous line | | `{`, `}` | prev/next paragraph |

#### Multi-line-related

| Command(s) | Description | | ---------- | ----------------------- | | `gg`, `G` | jump to first/last line |

### Editing

| Command(s) | Description | | ---------- | ----------------------------------------------------------- | | `r` | replace character under cursor | | `d`, `D` | delete a range or object | | `c`, `C` | change a range or object (delete, then go to insert mode) | | `s`, `S` | substitute (like change, but can only delete at the cursor) | | `x`, `X` | delete under cursor | | `y`, `Y` | yank (copy) into the clipboard | | `p`, `P` | paste from the clipboard | | `u`, `⌃r` | undo, redo | | `~` | toggle upper/lowercase under cursor | | `gu` | lowercase under cursor (`u` in visual mode) | | `gU` | uppercase under cursor (`U` in visual mode) | | `J` | join current and following lines | | `.` | repeat last edit | | `gcc` | toggle comments on current line | | `gc` | toggle comments on visual selection |

See [Vim docs: editing](https://vimdoc.sourceforge.net/htmldoc/editing.html) for more information.

#### Text objects

| Command(s) | Description | | ---------------- | ------------------------------------------ | | `i` | inner (exclude delimiters in text object) | | `a` | around (include delimiters in text object) | | `w`, `W` | whitespace-delimited string (word) | | `"`, `'`, \`\`\` | quote-delimited string | | `(`, `{`, `[` | parenthesized/bracketed string |

See [Vim docs: text objects](https://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects) for more information.

### Search

#### Character search

| Command(s) | Description | | ------------------ | ------------------------------------------------------ | | `t`, `T`, `f`, `F` | find next/prev matching character on line | | `;` | repeat last character search in the same direction | | `,` | repeat last character search in the opposite direction |

See [Vim docs: left-right motions](https://vimdoc.sourceforge.net/htmldoc/motion.html#f) for more information.

#### General search

Unlike Vim, general search commands don't search within the buffer. Instead, they open Warp's native command search.

| Command(s) | Description | | ------------------ | ------------------------ | | `/`, `?`, `*`, `#` | open Warp command search |

### Mode switching

| Command(s) | Description | | ---------- | ----------------------------------------------------------------- | | `i` | insert text before the cursor | | `I` | insert text before the first non-whitespace character in the line | | `a` | append text after the cursor | | `A` | append text at the end of the line | | `o` | begin new line below the cursor and insert text | | `O` | begin new line above the cursor and insert text | | `v` | visual character mode | | `V` | visual line mode |

See [Vim docs: insert](https://vimdoc.sourceforge.net/htmldoc/insert.html#insert) and [Vim docs: visual mode](https://vimdoc.sourceforge.net/htmldoc/visual.html#visual-mode) for more information.

### Registers

| Command(s) | Description | | ---------- | --------------- | | `"` | register prefix |

Warp currently supports the following registers:

| Register name | Description | | ---------------- | ---------------------------------------------------------------- | | `a`–`z`, `A`–`Z` | named registers | | `+` | system clipboard | | `*` | system clipboard | | `"` | unnamed register, containing the text of the last delete or yank |

See [Vim docs: registers](https://vimdoc.sourceforge.net/htmldoc/change.html#registers) for more information.

## Feedback

The best way to report bugs and request features is through Warp's [GitHub Issues](https://github.com/warpdotdev/Warp/issues) page. Please note that the issue or request is for Vim keybindings.
