zudo-codemirror-wisdom
GitHub repository

Type to search...

to open search from anywhere

Vim Mode Overview

Set up and configure @replit/codemirror-vim for CodeMirror 6.

Vim Mode Overview

@replit/codemirror-vim is the primary vim emulation package for CodeMirror 6. Originally developed by Replit, it provides a comprehensive vim experience inside any CodeMirror editor, including modal editing, motions, operators, text objects, registers, macros, and Ex commands.

Installation

pnpm add @replit/codemirror-vim

Basic Setup

Add vim() to the extensions array when creating an editor.

import { EditorView, basicSetup } from "codemirror";
import { vim } from "@replit/codemirror-vim";

const view = new EditorView({
  extensions: [
    vim(),
    basicSetup,
  ],
  parent: document.getElementById("editor")!,
});

Warning

Place vim() before basicSetup in the extensions array. The vim extension needs higher precedence so that its key handling takes priority over default keybindings.

Try the vim-mode editor below. Press Escape for Normal mode, i for Insert mode, use hjkl to navigate, : for Ex commands. The status bar at the bottom shows the current mode.

Vim Mode Editor

vim() Function Options

The vim() function accepts an optional configuration object.

vim({
  status: true, // show a vim status indicator (mode display)
})
  • status -- when true, the extension includes a panel that displays the current vim mode (Normal, Insert, Visual, etc.) and partial command input

How It Works

The vim extension overrides CodeMirror's default key handling. When a key is pressed:

  • The vim layer intercepts the event before CodeMirror's built-in keymap processing

  • The key is fed into an internal vim command parser that tracks partial commands, counts, and registers

  • Depending on the current mode, the parser either executes a command, transitions between modes, or passes the key through to CodeMirror

The extension maintains its own internal state for mode tracking, registers, marks, macros, and the command-line buffer. It translates vim operations into CodeMirror transactions (selections, replacements, and dispatches) to apply changes to the document.

Supported Modes

@replit/codemirror-vim supports the following vim modes:

  • Normal -- the default mode for navigation and issuing commands

  • Insert -- text input mode, entered via i, a, o, and related commands

  • Visual -- character-wise visual selection, entered via v

  • Visual Line -- line-wise visual selection, entered via V

  • Visual Block -- block (column) visual selection, entered via Ctrl-v

  • Replace -- overwrite mode, entered via R

  • Command-line (Ex) -- for Ex commands, entered via :

Accessing the Vim Object

Many customization APIs live on the Vim object, which is a separate import.

import { Vim } from "@replit/codemirror-vim";

This object provides methods for defining custom Ex commands, key mappings, options, and register manipulation. The following pages in this section cover each of these in detail.

Revision History

Takeshi TakatsudoCreated: 2026-03-30T04:51:29+09:00Updated: 2026-03-30T07:00:13+09:00