English

@vimee/shiki-editor

Shiki による構文ハイライト付き Vim エディター

Shiki による構文ハイライト付きのフル機能 Vim エディターコンポーネント。

インストール

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

使い方

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デフォルト説明
contentstring(必須)エディターコンテンツ
highlighterHighlighterGeneric(必須)Shiki ハイライターインスタンス
langstring(必須)言語識別子
themestring(必須)Shiki テーマ名
shikiOptionsRecord<string, unknown>追加の Shiki オプション
cursorPositionstring"1:1"初期カーソル位置(1ベース)
onChange(content: string) => voidコンテンツ変更コールバック
onYank(text: string) => voidヤンクコールバック
onSave(content: string) => void保存コールバック
onModeChange(mode: VimMode) => voidモード変更コールバック
onAction(action: VimAction, key: string) => voidアクションコールバック
classNamestringコンテナ CSS クラス
readOnlybooleanfalse編集を無効にする
autoFocusbooleanfalseマウント時に自動フォーカス
indentStyle"space" | "tab""space"インデント文字
indentWidthnumber2インデント幅
showLineNumbersbooleantrue行番号を表示

サブコンポーネント

このパッケージは、カスタムレイアウト用の個別サブコンポーネントもエクスポートしています:

  • <Cursor /> — エディターカーソルをレンダリング
  • <Line /> — ハイライトされた1行をレンダリング
  • <StatusLine /> — Vim ステータスバーをレンダリング

フック

  • useShikiTokens(highlighter, content, lang, theme, extraOptions?) — Shiki でコンテンツをトークナイズ
  • computeSelectionInfo(cursor, visualAnchor, buffer) — ビジュアル選択範囲を計算

CSS

ベーススタイルをインポート:

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