日本語

@vimee/react

React hooks and bindings for vimee

React bindings for vimee, providing the useVim hook for seamless integration.

Installation

npm install @vimee/core @vimee/react

useVim

The primary hook for integrating vimee into a React component:

import { useVim } from "@vimee/react";

function Editor() {
  const { content, cursor, mode, handleKeyDown } = useVim({
    content: "Hello, vimee!",
  });

  return (
    <div onKeyDown={handleKeyDown} tabIndex={0}>
      <pre>{content}</pre>
      <div>Mode: {mode} | Cursor: {cursor.line}:{cursor.col}</div>
    </div>
  );
}

Options

Option Type Default Description
content string (required) Initial editor content
cursorPosition string "1:1" Initial cursor position (1-based, "line:col")
readOnly boolean false Disable editing
onChange (content: string) => void Called when content changes
onYank (text: string) => void Called on yank
onSave (content: string) => void Called on :w
onModeChange (mode: VimMode) => void Called on mode change
onAction (action: VimAction, key: string) => void Called on every action
indentStyle "space" | "tab" "space" Indent character
indentWidth number 2 Indent width
keybinds KeybindEntry[] Custom keybindings
commands CommandEntry[] Custom ex-commands

Return Value

Field Type Description
content string Current buffer content
cursor CursorPosition Current cursor (0-based)
mode VimMode Current Vim mode
statusMessage string Status bar message
statusError boolean Whether status is an error
visualAnchor CursorPosition | null Visual mode anchor
commandLine string Ex command being typed
handleKeyDown (e: React.KeyboardEvent) => void Attach to onKeyDown
handleScroll (direction, visibleLines, amount?) => void Scroll handler
updateViewport (topLine, height) => void Viewport sync