The full-column ColorColumn was visually overwhelming on every line, especially with default vim's LightRed (kicked in silently when solarized8 wasn't installed). Replace it with an OverLength match that only highlights characters past the buffer's textwidth. - editing.vim: OverLength matchadd, refreshed on FileType/BufWinEnter/OptionSet - languages.vim: drop colorcolumn from per-filetype autocmds (textwidth still set) - ui.vim: VertSplit/CursorLine/CursorLineNr/SignColumn override via ColorScheme autocmd; fillchars for vert and eob; timer-based warning if solarized8 missing |
||
|---|---|---|
| .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.
24–25 plugins (tmux-navigator loads only inside tmux), 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, goimports, 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 | ,gL log graph | ,gC FZF commits | ,gB buffer commits | ]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 | ,af format on save
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 + 24–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 | 12 (gzip, tar, zip, vimball, logiPat, 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.