A lightweight plugin that attaches Vim keybindings to a standard HTML <textarea>. Ideal for simple use cases where syntax highlighting is not needed.
Installation
npm install @vimee/core @vimee/plugin-textarea
Usage
import { attach } from "@vimee/plugin-textarea";
const textarea = document.querySelector("textarea")!;
const vim = attach(textarea, {
onChange: (value) => console.log("Content:", value),
onModeChange: (mode) => console.log("Mode:", mode),
});
// Later: clean up
vim.destroy();
API
attach(textarea, options?)
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| readOnly | boolean | false | Disable editing |
| onChange | (value: string) => void | — | Content change callback |
| onModeChange | (mode: VimMode) => void | — | Mode change callback |
| onYank | (text: string) => void | — | Yank callback |
| onSave | (value: string) => void | — | Save callback |
| onAction | (action: VimAction, key: string) => void | — | Action callback |
| indentStyle | "space" \| "tab" | "space" | Indent character |
| indentWidth | number | 2 | Indent width |
Return: VimTextarea
| Method | Return | Description |
|--------|--------|-------------|
| .getMode() | VimMode | Current Vim mode |
| .getCursor() | CursorPosition | Cursor position (0-based) |
| .getContent() | string | Buffer content |
| .destroy() | void | Remove Vim keybindings |