chopsticks/CHANGELOG.md

11 KiB

Changelog

Unreleased

3.0.0 — 2026-05-21

Breaking

  • Default keymap style is now space: SPC is the command leader and , is reserved for filetype-local actions. Set let g:chopsticks_keymap_style = 'classic' in ${XDG_CONFIG_HOME:-~/.config}/chopsticks.vim to keep the old comma layout
  • In the default Space layout, Normal-mode s is now the fastest EasyMotion over-window two-character jump. Use cl for native s substitute and cc for native S substitute
  • Git push and pull hotkeys are removed from both Space and classic layouts; use :Git push / :Git pull explicitly for irreversible remote operations

Added

  • Canonical QWERTY/CapsLock-friendly Space leader layout: SPC SPC, SPC /, SPC ,, SPC w, SPC qx, SPC rr, SPC gs, SPC gl, SPC ca, SPC cr, SPC cf, and SPC ?
  • Native LSP motions in the default layout: gd, gr, gI, gy, K, [d, and ]d
  • :ChopsticksTutor guided practice buffer for learning the final keymap
  • :ChopsticksCheatSheet command, with SPC ? as the discoverable default
  • Dedicated modules for buffers, utilities, files, runner, quickfix, status, cheat sheet, and tutor
  • Split test runner: scripts/test.sh now dispatches to scripts/test-quick.sh and scripts/test-vim.sh

Changed

  • README, QUICKSTART, installer onboarding text, PR template, and demo tape now teach the Space layout first while keeping the legacy classic layout documented
  • SPC ? / ,? cheat sheet output is generated from the active keymap style and profile, so minimal installs no longer display disabled features
  • Markdown actions now use localleader maps in the Space layout: ,mp preview and ,mt table of contents
  • SPC U opens UndoTree, SPC z toggles maximize, SPC bp / SPC bn move between buffers, and quickfix/location-list actions live under SPC x
  • tools.vim is now a compatibility placeholder; runtime behavior lives in smaller focused modules
  • CI/local smoke coverage now asserts Space defaults, classic compatibility, missing push/pull hotkeys, tutor and cheat-sheet content, runner behavior, large-file protection, and startup budget

Fixed

  • diffopt enhancements now degrade safely on macOS system Vim builds that report the required patch level but reject individual diff options
  • Installer system-tool reporting now still detects already-installed tools on Linux hosts where sudo is unavailable in non-interactive mode

2.2.0 — 2026-05-17

Added

  • ~/.config/chopsticks.vim local pre-load config for profile and user choices
  • g:chopsticks_enable_markdown_preview to control Previm independently
  • g:chopsticks_profile with minimal, engineer, and full profiles
  • .markdownlint.json aligned with the project's README/changelog style
  • :ChopsticksStatus diagnostic command — checks system tools, LSP servers, linters, formatters
  • ,af toggle format-on-save (ALE fix_on_save)
  • ,gL git log graph (last 20 commits)
  • ,gC FZF git commits search, ,gB buffer commits
  • Interactive installer profile selection for minimal, engineer, and full
  • install.sh --profile=minimal|engineer|full for scripted profile selection
  • install.sh --dry-run to show the resolved profile/config path without writes
  • install.sh --configure-only to update local profile config without reinstalling
  • get.sh --dry-run for safe bootstrap previews before clone/update/install
  • CHOPSTICKS_DEST=/absolute/path to test or install the bootstrap target elsewhere
  • scripts/test.sh local test runner reused by GitHub Actions
  • scripts/test.sh quick, --help, and list for easier local test discovery

Fixed

  • Built-in plugin guards for gzip, logiPat, rrhelper, and spellfile_plugin are now set in both g:-prefixed and unscoped forms — those four old-style runtime plugins check loaded_X (no g:), so the previous g:loaded_X lines did nothing. Saves ~270μs total at startup, mostly from gzip
  • install.sh interactive menu and QUICKSTART now show ,ff (current fuzzy-find binding) instead of the stale Ctrl+p left over from the native-first cleanup; .github/demo.tape updated to match (the binary GIF still shows Ctrl+p until someone regenerates it from a fresh fixture)
  • README badge and install.sh recommend Vim 8.1+ instead of 8.0+ — the runtime conditionally relies on patches 8.1.0360 (diffopt) and 8.1.1517 (completeopt+=popup), so 8.0 users hit option errors
  • ttimeoutlen is now 50ms when g:is_tty (was 10ms unconditionally); fixes F-keys, arrow keys, and Alt-prefixes fragmenting on SSH where one-way latency exceeds 10ms. Local terminals keep the 10ms snappy default
  • install.sh no longer silently PlugClean!s user-added plugins from ~/.vim/plugged; it now lists undeclared plugin directories first and asks before removing them (--yes skips the removal entirely)
  • install.sh Python tools now prefer pipx and pip3 --user over pip3 install --break-system-packages; the break-system path is gated behind CHOPSTICKS_ALLOW_BREAK_SYSTEM=1 so PEP 668 distros are no longer silently polluted
  • g:loaded_logipat typo → g:loaded_logiPat — logiPat was loading fully (0.478ms wasted)
  • get.sh now refuses to update an existing ~/.vim git repo unless its origin is chopsticks
  • Large file protection now stays active after filetype and syntax autocommands
  • g:ale_fix_on_save = 0 in local config is now respected
  • Local config now respects absolute XDG_CONFIG_HOME instead of hardcoding ~/.config

Changed

  • install.sh "First steps inside Vim" block now leads with ,? (cheat sheet) — the single best onboarding asset is now the first thing a new user sees after install, not the fourth
  • set exrc/set secure are now opt-in via g:chopsticks_enable_exrc = 1; Vim no longer sources project-local .vimrc/.exrc from the working directory by default
  • Normal-mode ,F (reindent the entire file with gg=G) is now opt-in via g:chopsticks_enable_reindent_file = 1; visual-mode ,F (reindent selection) stays as the default since it's bounded by the user's pick
  • ,? cheat sheet is now profile-aware and hides LSP/ALE/preview/UndoTree keys when those features are disabled
  • Module reload/source paths now use fnameescape() so installs in paths with spaces are handled correctly
  • CI now verifies path-safe module loading, the local config hook, and minimal-profile cheat sheet output
  • Markdown now opens in quiet writing mode by default: no real-time markdownlint, no Marksman LSP, no spell noise, no conceal, no sign column, and no realtime preview
  • Native s is no longer shadowed by EasyMotion; use ,S for the two-character jump
  • ,w now uses a normal :write instead of forced :write!
  • Swap files are enabled again and stored under ~/.vim/.swap for crash recovery
  • Installer defaults are slimmer: only core search tools stay selected by default; language and lint suites are opt-in
  • :ChopsticksStatus now respects disabled LSP/lint profiles instead of reporting intentionally disabled tools as missing
  • ,sv now clears the load guard before sourcing $MYVIMRC
  • CI now verifies key plugin directories, Markdown quiet defaults, markdownlint, and an explicit startup-time threshold
  • Installer plugin validation now checks every plugin required by the active profile
  • The optional tool menu now hides LSP/lint suites in minimal and selects Marksman by default in full
  • tmux integration is written as a managed block so future installer runs can update it without appending duplicate bindings
  • Installer cleanup now restores the cursor after interrupted checkbox menus
  • Bootstrap dry-run now refuses unrelated existing git repos before any writes
  • CI now shares shell, installer, bootstrap, docs, and Vim smoke checks with the local test runner
  • CI now checks the test runner help and group-list commands
  • Skip 2 more built-in plugins: openPlugin, manpager (10 → 12 total)
  • Remove deprecated set ttyfast (no-op since Vim 8)
  • Add grepprg=rg --vimgrep:grep now uses ripgrep + quickfix
  • Add diffopt with histogram algorithm and indent-heuristic
  • Consolidate FZF Rg/RgWord/GFiles commands (DRY refactor)
  • vim-tmux-navigator: conditional load (only inside tmux), fallback Ctrl+hjkl mappings outside
  • Add Ctrl+hjkl window navigation fallback when tmux-navigator not loaded

2.1.0 — 2025-04-22

Added

  • Cheat sheet (,?) — vertical sidebar, one key per line, section headers
  • Previm markdown preview restored (lazy-loaded, ,mp)
  • :LspInstallServer added to cheat sheet

Changed

  • Plugin count: 25 (restored previm, dropped 5 bloat plugins)
  • QUICKSTART updated — removed stale references, improved first-launch guidance

2.0.0 — 2025-04-21

Added

  • Sidebar toggle (,e / ,E) — left-side netrw with topleft vertical, winfixwidth, proper toggle
  • Enriched statusline — SLMode, SLGit, SLAle, SLFlags
  • Toggle feedback — F2/F3/F4/F6/,ss echo current state
  • vim . layout — netrw left + Startify right (removed in later refactor)
  • Interactive tutorial (:ChopsticksLearn — removed in later release)

Removed (Unix minimalism refactor)

  • 565 lines of dead code and bloat
  • 5 plugins: Goyo, Limelight, vim-obsession, indentLine, vim-unimpaired
  • modules/writing.vim — folded into languages.vim
  • tutor/chopsticks.tutor — removed (269 lines)
  • Tab management keybindings (8 mappings), spell nav bindings (4 mappings)
  • Dead functions: HasPaste(), CleanExtraSpaces(), ToggleNumber(), SynStack
  • TTY welcome message, ,so, ,ms, ,sh mappings

Changed

  • CI plugin threshold lowered to 20
  • README: hero layout with demo GIF, badges, architecture diagram
  • vim-markdown settings absorbed from writing.vim into languages.vim

1.3.0 — 2025-04-20

Changed

  • Startup: 39ms → 19ms (51% faster)
  • Dropped vim-unimpaired for performance
  • Runtime tuning across modules

1.2.0 — 2025-04-19

Added

  • Hero README with demo GIF, CI badges
  • GitHub Actions CI (startup test on macOS + Ubuntu, shellcheck)
  • Issue/PR templates

Changed

  • Documentation rewrite — clean, short, for engineers

1.1.0 — 2025-04-18

Added

  • 12-module architecture (env → plugins → core → ui → editing → navigation → lsp → lint → git → writing → languages → tools)
  • Zen mode (Goyo + Limelight)
  • Run file (,cr) with auto filetype detection
  • Smart search (SmartFiles, Rg, RgWord)
  • EasyMotion, yank highlight, undo tree
  • Robust installer (get.sh) with preflight checks

Changed

  • .vimrc split into 12 self-contained modules
  • Comprehensive bug audit (14 fixes)

1.0.0 — 2025-04-16

Added

  • Initial Vim configuration — migrated from Neovim
  • vim-plug plugin manager
  • vim-lsp + asyncomplete (pure VimScript LSP)
  • ALE linting + format-on-save
  • FZF fuzzy finder
  • Fugitive + GitGutter
  • Solarized colorscheme
  • TTY detection and graceful degradation
  • Platform installer (macOS, Debian, Arch, Fedora)