-
Notifications
You must be signed in to change notification settings - Fork 0
Keybindings
edgar edited this page Feb 25, 2026
·
4 revisions
Complete keybinding reference for jvim. Use :help inside jvim to see the built-in help.
Note: jvim supports vim-style count prefixes (e.g.,
5jto move 5 lines,3ddto delete 3 lines,d3doperator-count pattern).
| Mode | Category | Key | Action | Remarks |
|---|---|---|---|---|
| Normal | Count Prefix | {N}motion |
Repeat motion N times | e.g., 5j, 3w, 2b
|
| Normal | Count Prefix | {N}G |
Go to line N | e.g., 5G → line 5 |
| Normal | Count Prefix | {N}dd |
Delete N lines | Fold-aware |
| Normal | Count Prefix | d{N}d |
Delete N lines | e.g., d3d
|
| Normal | Count Prefix | {N}yy |
Yank N lines | Fold-aware |
| Normal | Count Prefix | {N}x |
Delete N characters | |
| Normal | Count Prefix |
{N}p / {N}P
|
Paste N times | |
| Normal | Count Prefix | {N}J |
Join N times | |
| Normal | Movement |
h, Left
|
Move left one column | |
| Normal | Movement |
j, Down
|
Move down one line | Skips folded lines |
| Normal | Movement |
k, Up
|
Move up one line | Skips folded lines |
| Normal | Movement |
l, Right
|
Move right one column | |
| Normal | Movement | w |
Move to start of next word | |
| Normal | Movement | b |
Move to start of previous word | |
| Normal | Movement | 0 |
Jump to beginning of line | Column 0 |
| Normal | Movement |
$, End
|
Jump to end of line | |
| Normal | Movement |
^, Home
|
Jump to first non-whitespace char | |
| Normal | Movement | gg |
Jump to first line | |
| Normal | Movement | G |
Jump to last line | |
| Normal | Movement | % |
Jump to matching bracket |
{}/[]/()
|
| Normal | Movement |
PgDn, Ctrl+f
|
Page down | Full screen height |
| Normal | Movement |
PgUp, Ctrl+b
|
Page up | Full screen height |
| Normal | Movement | Ctrl+d |
Half page down | |
| Normal | Movement | Ctrl+u |
Half page up | |
| Normal | Movement | Ctrl+e |
Scroll view down one line | View only, cursor stays |
| Normal | Movement | Ctrl+y |
Scroll view up one line | View only, cursor stays |
| Normal | Movement | Ctrl+g |
Show file info | Line number, percentage |
| Normal | Insert Entry | i |
Insert at cursor position | |
| Normal | Insert Entry | I |
Insert at first non-whitespace char | |
| Normal | Insert Entry | a |
Append after cursor | |
| Normal | Insert Entry | A |
Append at end of line | |
| Normal | Insert Entry | o |
Open new line below | Auto-indent; {/[ ending adds +4 spaces |
| Normal | Insert Entry | O |
Open new line above | Auto-indent; {/[ ending adds +4 spaces |
| Normal | Editing | x |
Delete character at cursor | |
| Normal | Editing | dd |
Delete entire line | Yanked to clipboard |
| Normal | Editing | dw |
Delete word forward | Including trailing spaces |
| Normal | Editing | d$ |
Delete from cursor to end of line | |
| Normal | Editing | d0 |
Delete from cursor to beginning | |
| Normal | Editing | cw |
Change word | Delete word + enter insert mode |
| Normal | Editing | cc |
Change line | Clear content + enter insert mode with indent |
| Normal | Editing | r{char} |
Replace character at cursor | |
| Normal | Editing | J |
Join current line with next | With space separator |
| Normal | Editing | u |
Undo | |
| Normal | Editing | Ctrl+r |
Redo | |
| Normal | Editing | . |
Repeat last edit command | |
| Normal | Clipboard | yy |
Yank (copy) current line | |
| Normal | Clipboard | p |
Paste after cursor/line | Line yank → new lines; char yank → inline |
| Normal | Clipboard | P |
Paste before cursor/line | Line yank → new lines; char yank → inline |
| Normal | Folding | za |
Toggle fold at cursor line | JSON blocks and long strings (60+ chars) |
| Normal | Folding | zo |
Open fold at cursor line | |
| Normal | Folding | zc |
Close fold at cursor line | Finds enclosing block if not on fold start |
| Normal | Folding | zM |
Fold all top-level blocks | Includes long string values |
| Normal | Folding | zR |
Unfold all | |
| Normal | Embedded JSON | ej |
Open embedded JSON editor | Edits JSON string value at cursor |
| Normal | Search | / |
Enter forward search mode | |
| Normal | Search | ? |
Enter backward search mode | |
| Normal | Search | n |
Jump to next match | |
| Normal | Search | N |
Jump to previous match | |
| Normal | Visual | v |
Toggle character-wise visual mode | |
| Normal | Visual | V |
Toggle line-wise visual mode | |
| Insert | Input | Any character | Insert at cursor position | |
| Insert | Input | Backspace |
Delete character before cursor | At column 0: join with previous line |
| Insert | Input | Enter |
New line with auto-indent | Between {}/[]: splits with proper indent |
| Insert | Input | Tab |
Insert 4 spaces | |
| Insert | Input |
}, ]
|
Insert with auto-dedent | Only when line before cursor is whitespace only |
| Insert | Navigation | Home |
Move to first non-whitespace char | |
| Insert | Navigation | End |
Move to end of line | |
| Insert | Navigation | Arrow keys | Navigate | Without leaving insert mode |
| Insert | Exit | Escape |
Return to normal mode | |
| Visual | Selection | h/j/k/l |
Extend selection | Arrow keys also work |
| Visual | Selection |
w, b
|
Extend selection by word | |
| Visual | Selection |
$, 0, ^
|
Extend to line boundaries | |
| Visual | Operator | d |
Delete selection | Char-wise (v) or line-wise (V) |
| Visual | Operator | y |
Yank (copy) selection | |
| Visual | Operator | c |
Change selection | Delete + enter insert mode |
| Visual | Exit | Escape |
Cancel selection | Return to normal mode |
| Command | Navigation | :{num} |
Jump to line number | JSONL mode: jumps to record number |
| Command | Navigation | :p{num} |
Jump to JSONL record number | |
| Command | Navigation | :l{num} |
Jump to editor line number | Bypasses JSONL record interpretation |
| Command | Navigation | :$ |
Jump to last line | |
| Command | File | :w |
Save file | Validates JSON before saving |
| Command | File | :w! |
Force save | Skip JSON validation |
| Command | File | :w {file} |
Save as new file |
Tab for path completion |
| Command | File | :e {file} |
Open file |
Tab for path completion; ~ → home |
| Command | File | :n |
Next file | Multi-file mode |
| Command | File | :N |
Previous file | Multi-file mode |
| Command | File | :e# |
Alternate (previous) file | |
| Command | File | :q |
Quit | Warns if unsaved changes |
| Command | File | :q! |
Force quit | Discard changes |
| Command | File | :wq |
Save and quit | |
| Command | File | :wq! |
Force save and quit | |
| Command | File | :x |
Save and quit | Alias for :wq
|
| Command | Editing | :fmt |
Reformat/prettify JSON | Also :format
|
| Command | Editing | :s/old/new/ |
Substitute first match | Current line; see Substitute |
| Command | Editing | :s/old/new/g |
Substitute all matches | Current line |
| Command | Editing | :%s/old/new/g |
Substitute entire file | |
| Command | Editing | :N,Ms/old/new/g |
Substitute in line range | |
| Command | Other | :help |
Toggle help panel | |
| Command | Other | Tab |
Path completion | For :e and :w; cycles through candidates |
| Command | Other |
Up/Down
|
Navigate command history | |
| Command | Other | Escape |
Cancel command | |
| Search | Input | Characters | Build search pattern | |
| Search | Input | Enter |
Execute search | |
| Search | Input | Backspace |
Delete last character | |
| Search | Input | Escape |
Cancel search | |
| Search | Input |
Up/Down
|
Navigate search history | |
| Search | Modifier | \j |
Force JSONPath mode | Appended to pattern |
| Search | Modifier | \c |
Force case-insensitive | Appended to pattern |
| Search | Modifier | \C |
Force case-sensitive | Appended to pattern |
| Diff | Navigation | ]c |
Next diff hunk | Wraps around |
| Diff | Navigation | [c |
Previous diff hunk | Wraps around |
| Diff | Panel | Tab |
Switch left/right panel | Active panel shown in title bar color |
| Diff | Embedded JSON | ej |
Open embedded JSON diff | Both panels open simultaneously |
| Diff | Ignore | :ig <path> |
Ignore JSONPath in diff | |
| Diff | Ignore | :ig |
Show ignored paths | |
| Diff | Ignore | :ig! |
Clear all ignored paths | |
| Diff | Ignore | :uig <path> |
Unignore JSONPath |
Tab to complete from ignored list |