Skip to content

Releases: oribarilan/vimcode

v0.14.0

13 Jun 17:29

Choose a tag to compare

Added

  • /vim toggle command to disable/enable vim mode. Persisted across restarts.
  • Startup toast when vim is disabled so users know why keybindings aren't active.

Fixed

  • Leader key now works with modifier-based configurations like the default ctrl+x. Previously, parseLeaderKey expected vim-style C-x notation but OpenCode's keybinds API returns ctrl+x format, so the leader key was silently broken for any config with modifiers.
  • Leader detection supports all OpenCode modifier aliases (control, alt, option, super) and multiple leader bindings.
  • Optional chaining on api.kv.set to avoid crashes on older OpenCode versions.
  • Escape/Enter no longer intercepted when vim is disabled.
  • Toggling vim off resets mode and clears pending state.
  • :vim palette title uses : prefix, consistent with :q/:quit/:wq.

v0.13.0

13 Jun 17:29

Choose a tag to compare

Changed

  • Leader key is now auto-detected from OpenCode's keybinds.leader config. The leader plugin option has been removed.

Fixed

  • Leader key (e.g. space) no longer enters pending-sequence state when typing in question or permission prompt overlays.

v0.12.2

08 Jun 15:03
e17ca43

Choose a tag to compare

Reverted

  • Persistent mode indicator removed. The SolidJS slot approach doesn't work from git-installed plugins — the host's JSX runtime can't be resolved from the package cache (#3).

Changed

  • modeIndicator option now accepts "toast" (default) or "none".
  • Ctrl+O one-shot normal now emits a proper mode action. The toast shows (insert) in lowercase, matching Vim convention.

v0.12.1

08 Jun 14:53
0a2d090

Choose a tag to compare

Fixed

  • Plugin failed to load when installed via git URL. Peer dependencies (solid-js, @opentui/solid, @opentui/core) were getting installed into the plugin's node_modules/, and their .d.ts stubs shadowed the host's runtime modules. Removed peer deps — the host provides these at runtime.

v0.12.0

08 Jun 14:14
8eabc6e

Choose a tag to compare

Added

  • Persistent mode indicator next to the prompt (#3). Shows NORMAL, INSERT, VISUAL, or (insert) for one-shot normal. Replaces the old toast, which disappeared after a second.
  • modeIndicator option: "status" (default, persistent label), "toast" (old behavior), or "none" (disabled). The old modeToast option still works as a fallback.

Changed

  • Plugin entry point is now .tsx (was .ts) to support SolidJS slot rendering.

v0.11.0

08 Jun 11:35
75a944b

Choose a tag to compare

Added

  • :q, :quit, and :wq quit OpenCode from the command palette (#19). Since : already opens the palette, typing :q and pressing Enter exits the app.
  • Ctrl+O in insert mode — run one normal-mode command, then return to insert. Motions, operators, counts, and r{char} all work.
  • leader plugin option — lets you use space (or any key) as leader without breaking insert mode. Spaces type normally while editing, and leader sequences like space l still work in normal mode (#21).

v0.10.0

31 May 18:52
bd7e23b

Choose a tag to compare

Added

  • dG and cG — delete/change from cursor to end of buffer. yG already worked, now all three operators work with G.

Changed

  • Cursor shape is set via the editor widget's cursorStyle property instead of writing DECSCUSR escape sequences to stdout. Fixes terminals that don't support DECSCUSR (e.g. macOS Terminal.app).

Fixed

  • dG, cG, de, ce undo in a single u press. The host editor's undo system splits multi-line deletions into per-line entries, so these operations now go through editBuffer.deleteRange() with a pre-operation snapshot that u restores from directly.
  • yy reads the cursor position from the editor widget instead of a line counter. The counter drifted on clicks, arrow keys, and word motions, causing yy to yank the wrong line.
  • e moves to end of word instead of behaving like w. de, ce, and ye operate on the correct range too.
  • g waits for a second keypress instead of jumping to buffer start on its own. gg now works as a proper two-key command.

v0.9.0

29 May 17:15
538de55

Choose a tag to compare

Added

  • r{char} replaces the character under the cursor. Supports counts: 3ra replaces 3 characters with a.

v0.8.0

26 May 18:06

Choose a tag to compare

Added

  • Yank with motions: yw, yb, ye, y$, y0, y^, yh, yl, yj, yk, yG. Previously only yy worked.
  • Plugin init sanity test that catches crashes from hostile API shapes before release.
  • Biome for linting and formatting, enforced in CI.
  • just test, just lint, just lint-fix, just check recipes.

Fixed

  • Plugin failed to load when api.kv didn't match the expected interface (e.g. object with no .get method). Broke installs on some OpenCode versions.

Changed

  • README operators section rewritten to show d, c, and y side by side for each motion.
  • Noted that e and w behave identically (the host has no separate end-of-word command).

v0.7.0

26 May 17:25

Choose a tag to compare

Added

  • Cross-platform clipboard. Yank/paste now works on macOS (pbcopy), Windows (clip.exe), and Linux (xclip). Previously macOS-only.
  • Plugin configuration via tui.json tuple syntax. Three options available:
    • updateCheck — disable the daily GitHub version check.
    • modeToast — disable the mode-switch toast, relying on cursor shape alone.
    • startMode — start in normal mode instead of insert.
  • Daily caching for the update checker via api.kv. Previously checked GitHub on every launch.
  • GitHub Actions CI — runs bun test on push and PR to main.
  • Issue templates for bug reports and missing keybinding requests.
  • Version sync test — catches drift between VERSION and package.json at test time.
  • typecheck script (tsc --noEmit) in package.json.
  • MIT LICENSE file.

Changed

  • Removed unused devDependencies (@opentui/core, @opentui/keymap, @opentui/solid, solid-js). Pinned @opencode-ai/plugin to ^1.15.4.
  • Removed private: true from package.json.
  • Dropped lockfiles from git. Plugin consumers resolve their own deps.
  • Replaced local paths in AGENTS.md with public GitHub URLs.
  • Fixed g/gg contradiction in README — g removed from keybinding tables.
  • Added platform notes and configuration sections to README.