- Add :ChopsticksStatus to features table, LSP section, troubleshooting - Add ,? cheat sheet, ,mp preview, toggle keys to keybinding reference - Add missing bindings: [<Space>], ,E, ,gl, ,bd, ,cp, ,cf, ,wa, ,F, ,W - Fix lazy-loaded count: 7 (not 6) - Update architecture descriptions to match current modules - Add health check section to QUICKSTART - Add :ChopsticksStatus to cheat sheet sidebar |
||
|---|---|---|
| .github | ||
| modules | ||
| .gitignore | ||
| .vimrc | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| get.sh | ||
| install.sh | ||
| LICENSE | ||
| QUICKSTART.md | ||
| README.md | ||
chopsticks
Vim for engineers. 25 plugins, works over SSH.
curl -fsSL https://raw.githubusercontent.com/m1ngsama/chopsticks/main/get.sh | bash
Why
You SSH into a server. You need to edit code. You want LSP, fuzzy find, git integration, format-on-save — not a 20-minute setup.
chopsticks gives you a production-ready Vim config in one command. Pure VimScript — no Node.js for the core. Degrades gracefully on TTY. Works the same on your MacBook and your headless Arch box.
25 plugins, LSP, linting, and a hand-built statusline. No bloat, no decorations, just tools.
What's in the box
| Feature | Description |
|---|---|
| LSP | completion, go-to-def, hover, rename, code actions — pure VimScript (vim-lsp) |
| Lint + format | ALE runs black, prettier, gofmt, rustfmt on save |
| Fuzzy find | files, buffers, grep, tags, marks, commands — FZF |
| Git | status, diff, blame, push, pull, conflict markers — fugitive + gitgutter |
| Run file | ,cr — auto-detects Python, Go, Rust, JS, C, Shell, and more |
| Markdown | live preview in browser (,mp), table of contents (,mt) |
| Diagnostics | :ChopsticksStatus — see what's installed, what's missing, how to fix it |
| TTY-aware | degrades gracefully on SSH, console, slow links — never breaks |
Install
curl -fsSL https://raw.githubusercontent.com/m1ngsama/chopsticks/main/get.sh | bash
Or manually:
git clone https://github.com/m1ngsama/chopsticks.git ~/.vim
cd ~/.vim && ./install.sh
Supports macOS (brew), Debian/Ubuntu (apt), Arch (pacman), Fedora (dnf).
First launch installs plugins automatically (30-60s). Restart vim when done.
Keys
Leader: ,
Ctrl+p fuzzy find file gd go to definition
,rg ripgrep project K hover docs
,e toggle file sidebar ,cr run current file
,gs git status ,f format
,w save ,q quit
jk exit insert mode ,? cheat sheet
All keybindings
Files
Ctrl+p find | ,b buffers | ,rg grep | ,rG grep word | ,fh recent | ,fl lines | ,e browser | ,E browser (file dir) | ,, last file
Code
gd def | gy type | gi impl | gr refs | K docs | [g ]g diagnostics | [e ]e ALE errors | ,rn rename | ,ca action | ,o outline | ,cr run
Edit
s+2ch jump | gc comment | cs"' surround | Alt+j/k move line | ,u undo tree | ,y clipboard | ,* replace word | ,F re-indent | ,W strip whitespace | [<Space> ]<Space> blank lines
Git
,gs status | ,gd diff | ,gb blame | ,gc commit | ,gp push | ,gl pull | ]x [x conflict
Windows
Ctrl+hjkl navigate (+ tmux) | ,z maximize | ,h ,l buffers | ,bd close buffer | ,= ,− resize | ,tv ,th terminal | Esc Esc exit terminal
Markdown
,mp preview in browser | ,mt table of contents
Toggle
F2 paste | F3 line numbers | F4 relative numbers | F6 invisible chars | ,ss spell check
Utilities
,cp copy full path | ,cf copy filename | ,ev edit vimrc | ,sv reload vimrc | ,wa save all | :ChopsticksStatus diagnostics
LSP
:LspInstallServer " auto-detects filetype
:LspStatus " check what's running
:ChopsticksStatus " see all tools + LSP + linters at a glance
pylsp, gopls, rust-analyzer, clangd, marksman, sqls — no Node.js. JS/TS servers need Node.
ALE and vim-lsp coexist cleanly (ale_disable_lsp=1). ALE handles linting + formatting. vim-lsp handles everything else.
Architecture
~/.vim/
├── .vimrc thin loader
├── modules/
│ ├── env.vim TTY detection, truecolor, skip built-in plugins
│ ├── plugins.vim vim-plug + 25 plugins
│ ├── core.vim settings, keymaps, performance
│ ├── ui.vim solarized, statusline, startify
│ ├── editing.vim easymotion, yank highlight, blank lines
│ ├── navigation.vim fzf, netrw sidebar, windows, terminal
│ ├── lsp.vim vim-lsp, asyncomplete
│ ├── lint.vim ale, format-on-save
│ ├── git.vim fugitive, gitgutter, conflict nav
│ ├── languages.vim vim-go, markdown, filetype settings
│ └── tools.vim run file, quickfix, cheat sheet, diagnostics
Each module is self-contained. Comment out one line in .vimrc to disable it. Add your own with call s:load('mine').
Performance
| Metric | Value |
|---|---|
| Lazy-loaded | 7 plugins (on command or filetype) |
| Built-in plugins skipped | 10 (gzip, tar, zip, vimball, etc.) |
| Large file threshold | 10MB (auto-disables syntax + undo) |
| TTY large file | 500KB (syntax disabled) |
Troubleshooting
| Problem | Fix |
|---|---|
| Plugins not loading | :PlugInstall then :PlugUpdate |
| LSP not starting | :LspInstallServer for current filetype |
| Colors wrong | export COLORTERM=truecolor in shell rc |
Ctrl+s freezes |
stty -ixon in shell rc |
| Everything slow | Large file? Auto-disabled >10MB |
| What's installed? | :ChopsticksStatus shows tools, LSP, linters |
More in the wiki.
Contributing
See CONTRIBUTING.md. The two rules that matter: no Node.js dependencies, and don't regress startup time.