日本語

@vimee/shiki-editor

Syntax-highlighted Vim editor powered by Shiki

A full-featured Vim editor component with syntax highlighting powered by Shiki.

Installation

npm install @vimee/core @vimee/react @vimee/shiki-editor shiki

Usage

import { use } from "react";
import { Vim } from "@vimee/shiki-editor";
import { createHighlighter } from "shiki";
import "@vimee/shiki-editor/styles.css";

const highlighterPromise = createHighlighter({
  themes: ["github-dark"],
  langs: ["typescript"],
});

function App() {
  const highlighter = use(highlighterPromise);

  return (
    <Vim
      content="const hello = 'world';"
      highlighter={highlighter}
      lang="typescript"
      theme="github-dark"
      onChange={(content) => console.log(content)}
    />
  );
}

Props

| Prop | Type | Default | Description | |------|------|---------|-------------| | content | string | (required) | Editor content | | highlighter | HighlighterGeneric | (required) | Shiki highlighter instance | | lang | string | (required) | Language identifier | | theme | string | (required) | Shiki theme name | | shikiOptions | Record<string, unknown> | — | Extra Shiki options | | cursorPosition | string | "1:1" | Initial cursor (1-based) | | onChange | (content: string) => void | — | Content change callback | | onYank | (text: string) => void | — | Yank callback | | onSave | (content: string) => void | — | Save callback | | onModeChange | (mode: VimMode) => void | — | Mode change callback | | onAction | (action: VimAction, key: string) => void | — | Action callback | | className | string | — | Container CSS class | | readOnly | boolean | false | Disable editing | | autoFocus | boolean | false | Auto-focus on mount | | indentStyle | "space" \| "tab" | "space" | Indent character | | indentWidth | number | 2 | Indent width | | showLineNumbers | boolean | true | Show line numbers |

Sub-components

The package also exports individual sub-components for custom layouts:

  • <Cursor /> — Renders the editor cursor
  • <Line /> — Renders a single highlighted line
  • <StatusLine /> — Renders the Vim status bar

Hooks

  • useShikiTokens(highlighter, content, lang, theme, extraOptions?) — Tokenize content with Shiki
  • computeSelectionInfo(cursor, visualAnchor, buffer) — Compute visual selection ranges

CSS

Import the base styles:

import "@vimee/shiki-editor/styles.css";