- README: one-liner curl install as primary method, updated Requirements table to reflect auto-install capability, expanded Installation section with 11-step installer description - QUICKSTART: Step 1 now leads with curl one-liner, includes traditional and --yes variants - CHANGELOG: add v1.2.0 entry covering all robustness and get.sh changes
11 KiB
Changelog
All notable changes to chopsticks are documented here.
[1.2.0] - 2026-04-09
Installer robustness overhaul and one-command bootstrap.
Added
get.sh— one-command bootstrap:curl -fsSL .../get.sh | bash- Installs
gitif missing (apt / pacman / dnf / brew) - Clones repo to
~/.vim;git pullif already present exec bash install.sh </dev/tty— interactive prompts work correctly even when piped from curl
- Installs
- Network connectivity check — warns early if
github.comis unreachable curlpreflight — detects missing curl, auto-installs or dies with clear instructionsgitpreflight — same as curlvimauto-install — attemptspkg_installbefore dying if vim is not foundsudoavailability check — authenticates once upfront;--yesmode skips sudo gracefully with a warning- macOS Homebrew installer — offers to install Homebrew when
brewis missing on macOS - Node.js via nvm — when Node.js is missing, offers to install nvm + Node.js LTS automatically
- Python 3 installer — offers to install python3 via package manager when missing
safe_download()helper — verifies downloads are non-empty and not HTML error pages (guards against GitHub 404 / rate-limit pages being silently treated as binaries)pkg_install()helper — unified cross-platform install (brew / apt / pacman / dnf)arch_github()/arch_linux_x64()helpers — normalizeuname -mincludingaarch64→arm64trap on_error ERR— catches unexpected failures, shows line number and debug commandtrap EXIT— cleans up temp files (/tmp/chopsticks-hadolint,/tmp/chopsticks-marksman)- Symlink verification — confirms
[[ -L ]]afterln -sf - vim-plug fallback — if curl download fails, falls back to
git clone; verifies file is non-empty vim +PlugInstallerror handling — warns on non-zero exit instead of silent continue- Screen-dark notice — informs user before each Vim fullscreen step (PlugInstall, CocInstall)
Changed
set -e→set -eo pipefail— pipeline failures now propagate correctlyask()now reads from/dev/ttywith a test-open check ({ true </dev/tty; }) — interactive prompts work undercurl | bashand non-interactive SSH sessions fall back to "no" safely- Binary downloads (hadolint, marksman) use named temp files and
safe_download()instead of bare curl - Arch architecture detection handles
aarch64in addition toarm64 - System tools section checks
HAS_SUDObefore running apt / pacman / dnf commands
[1.1.1] - 2026-04-09
Systematic absorption of best practices from amix/vimrc, tpope/vim-sensible, ThePrimeagen, skwp/YADR, and spf13-vim — settings and mappings that appear consistently across all top global configs but were missing here.
Added
set ttimeoutlen=10— eliminates the ~500ms ESC lag in terminal Vim; separates keycode timeout from leader-key timeout (timeoutlenunchanged at 500ms)set display+=lastline— shows truncated long lines instead of replacing them with@@@set complete-=i—Ctrl+n/pno longer scans all included files; completion is instantset wildignorecase— case-insensitive filename completion in wildmenu and:findset path+=**— recursive:findacross the project; wildignore excludesnode_modules,__pycache__,dist,build,.gitset sessionoptions— removesoptionsfrom saved sessions (prevents stale plugin settings from contaminating restored sessions)set listchars— defines visible whitespace characters; TTY uses ASCII symbols, modern terminals use Unicode (tab→, trail·, extends▸)F6— toggle visible whitespace on/offformatoptions-=croonBufEnter— disables automatic comment-leader insertion when pressing Enter oro/O; runs on BufEnter to override filetype pluginsInsertLeave * set nopaste— auto-disables paste mode on leaving insert, preventing permanently broken auto-indentcolorcolumn=+1for all languages viatextwidth: Python 88, Go 120, JS/TS 100, Rust 100, Shell 80 (Markdown disabled)vnoremap J/Kwithgv=gv— move selected lines down/up and re-indent (ThePrimeagen)gV— re-select last pasted text (\[v`]` — spf13, YADR)cnoremap <C-p>/<C-n>— navigate command-line history matching typed prefix (amix, spf13)<leader>e :Explore— open built-in Netrw file browser; works on any Vim without plugins<leader>cd— change window-local CWD to current file's directory (was<leader>wd)<leader>sv— reloads vimrc and echoes confirmation
Changed
<leader>wdrenamed to<leader>cd; now useslcd(window-local) instead ofcd(global)wildignoreexpanded with*/node_modules/*,*/__pycache__/*,*/dist/*,*/build/*
[1.1.0] - 2026-04-09
Ergonomics and automation overhaul: community-standard keybindings, seamless tmux integration, an in-Vim cheat sheet, a beginner onboarding section, and several correctness fixes from a systematic review.
Added
jk→Escin insert mode — ergonomic escape without reaching for the keyCtrl+ssave in normal and insert mode (addstty -ixonto shell rc to enable in terminals that use XON/XOFF flow control)//visual search — search for visually selected text using\Vvery-nomagic escaping<leader>p/<leader>P— paste from system clipboard after/before cursor<leader>rG— ripgrep word under cursor with-F(literal, not regex)<leader>u— leader-key alias for UndoTree (complementsF5)<leader>tt— leader-key alias for Tagbar (complementsF8),?in-Vim cheat sheet — opens a read-only buffer covering modes, survival commands, search, code intelligence, git, and clipboard; pressqto close- vim-tmux-navigator plugin —
Ctrl+h/j/k/lnavigates seamlessly across Vim splits and tmux panes without a prefix key install.shtmux step — detects tmux and optionally appends the four navigatorbind-keylines to~/.tmux.conf; warns aboutC-l/screen-clear tradeoffinstall.shsurvival guide — post-install output now shows the 4 essential commands for first-time Vim users, plus thestty -ixonadvisory- QUICKSTART.md Step 0 — new first section explaining Vim modes (Normal/Insert/Visual) and 4 survival commands; makes the guide usable by users who have never opened Vim
let b:ale_enabled = 0inLargeFileSettings()— ALE no longer spawns linter subprocesses for files over 10 MB
Changed
- ALE lint triggers —
ale_lint_on_text_changedchanged from'never'to'normal';ale_lint_on_insert_leaveandale_lint_on_enterchanged from0to1— diagnostics now refresh on buffer enter and after edits settle in normal mode <C-h/j/k/l>manual maps removed — vim-tmux-navigator owns these keys at plugin load time; the previous hand-rolled<C-W>maps were unreachable dead code<leader>pppaste-mode toggle removed — functionally identical to the existingF2pastetoggle; its presence caused a 500 ms delay on every<leader>ppaste
Fixed
- ALE navigation direction reversed —
[enow correctly callsALEPreviousand]ecallsALENext, matching the vim-unimpaired[/]convention <leader>rGregex metacharacter bug — without-F, characters like.*(in the cursor word were treated as regex, producing incorrect matches
[1.0.0] - 2026-03-29
First stable release. Full-stack engineering environment out of the box — automatic installation, tiered LSP, TTY fallback, and coverage for 14 languages.
Added
- Arch Linux support in
install.sh— pacman branch for all system tools hadolintadded to system tools installation (Dockerfile linting)staticcheckadded to Go tools (replaces archivedgolint)yamllintadded to pip tools (YAML linting)coc-settings.json— configuresmarksmanas Markdown LSP for CoC vialanguageserverentry; symlinked automatically byinstall.sh- pip3 bootstrap in
install.sh— auto-installs pip3 when python3 is present but pip3 is absent (common on Ubuntu minimal images) - 9 named augroups in
.vimrc— all looseautocmdstatements now wrapped withautocmd!to prevent doubling on:source $MYVIMRC:ChopstickTabHistory,ChopstickResize,ChopstickStdin,CocHighlight,ChopstickCleanup,ChopstickFiletype,ChopstickTTYLargeFile,ChopstickWhichKey,ChopstickStartify - TTY-safe plugin install —
vim +PlugInstall +qall </dev/nullprevents Vim from blocking in non-interactive/piped environments
Changed
- SQL tooling unified to
sqlfluff(pip) —sqlfmtremoved from npm section - Go linter changed from
golint(archived 2023) tostaticcheck - Markdown LSP changed from broken
coc-marksman(npm) tomarksmanbinary configured viacoc-settings.json
Fixed
- vim-go startup hang on Arch Linux — removed
:GoUpdateBinariespost-install hook; setg:go_gopls_enabled = 0to prevent conflict withcoc-go - E495 errors (
<afile>in special buffers) — all<afile>usages guarded with!empty(expand('<afile>'))andempty(&buftype)checks g:go_def_modeconflict — now conditional: usesgoplswhen CoC active,godefwhen vim-lsp active (avoids error when gopls is disabled)- vim startup UX — NERDTree + Startify layout for
vim .and barevim coc-marksmansilent failure — package does not exist on npm; replaced with nativelanguageserverconfiguration incoc-settings.json- CoC startup warning in no-node environments —
g:coc_start_at_startup = 0andg:coc_disable_startup_warning = 1set wheng:use_coc = 0
[0.9.0] - 2026-02-21
Added
- Full-stack language coverage — LSP, lint, and format for: Python, JavaScript, TypeScript, Go, Rust, Shell, YAML, HTML, CSS/SCSS, Less, JSON, Markdown, SQL, Dockerfile
install.shoverhaul — automated installation of system tools, npm tools, pip tools, Go tools, and CoC language server extensions with platform detection and interactive prompts;--yesflag for non-interactive mode- vim-startify startup screen with dynamic header (version, cwd, git branch)
- vim-which-key keybinding popup on
,+ 500ms pause - Startup layout —
vim .opens NERDTree left + Startify right; barevimopens Startify with NERDTree alongside - Session management via vim-obsession + vim-prosession
- Large file handling — syntax and undo disabled for files > 10 MB
- Project-local config —
.vimrcin project root auto-loaded viaset exrc - Persistent undo —
~/.vim/.undo/withundolevels=1000
Changed
- Tiered LSP backend: CoC (Node.js) preferred, vim-lsp (no Node.js) as fallback
- All CoC and vim-lsp keybindings unified (
gd,K,[g/]g,,rn,,ca) - ALE
fix_on_savedisabled when vim-lsp active (prevents double-format) - NERDTree autocmd wrapped in
augroup NERDTreeAutoClose
Fixed
- Multiple leader key conflicts resolved (
,ad,,cd,,cp,,sp,,t) - CtrlP removed (redundant with FZF)
- Duplicate
setoptions cleaned up <leader>Adead mapping (no alternate-file plugin) removed
[0.1.0] - 2024
Initial release — base Vim configuration with vim-plug, basic plugins, and TTY/non-TTY detection.