Comment on page
Vim Keybindings (Beta)
Use Vim keybindings to edit commands in Warp's input editor.
The Vi family of programs (including Vim and Neovim) are modal text editors that allow for keyboard-driven text editing. Several shells, including
bash
and zsh
, implement vi-style keybindings. Warp's input editor was built natively to support more modern text editing experiences, which means it replaces the shell's editor capabilities. Warp has its own implementation of Vim keybindings you can use.Please note: this feature is in Beta.
To enable Vim keybindings in Warp's input editor, open the Command Palette with
CMD-P
and type Vim Keybindings
. This setting is also available in the Settings modal, under Features
→ Editor
→ Edit commands with Vim keybindings
.Just as in
bash
and zsh
's vi mode implementations, the editor starts in insert mode.At the moment, Warp only supports default Vim keybindings.
One exception is the keyboard shortcut for exiting insert mode, which can be rebound through the Settings page, under
Keyboard Shortcuts
→ Exit Vim Insert Mode
, or through the Command Palette with CMD-P
and searching for Exit Vim Insert Mode
.Below is a list of the vim functionality implemented in Warp so far.
Command(s) | Description |
---|---|
h , j , k , l | single-char movement |
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 |
Command(s) | Description |
---|---|
gg , G | jump to first/last line |
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 |
. | repeat last edit |
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 |
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 |
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 |
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 |
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 |
This feature is still in Beta. We'd love to hear your feedback! The best way to report bugs and request features is through Warp's GitHub Issues page. Please upvote () existing issues to help the team prioritize them.
👍
Last modified 1mo ago