{"id":29908142,"url":"https://github.com/m1ngsama/chopsticks","last_synced_at":"2026-05-21T05:12:49.716Z","repository":{"id":263122005,"uuid":"889408636","full_name":"m1ngsama/chopsticks","owner":"m1ngsama","description":"Vim for engineers. 29 plugins, 19ms startup, works over SSH. Pure VimScript, no Node.js.","archived":false,"fork":false,"pushed_at":"2026-05-13T06:32:54.000Z","size":5252,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-13T06:35:45.286Z","etag":null,"topics":["ale","developer-tools","dotfiles","fzf","lsp","solarized","ssh","vim","vim-configuration","vimrc"],"latest_commit_sha":null,"homepage":"https://github.com/m1ngsama/chopsticks/wiki","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m1ngsama.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-16T09:57:38.000Z","updated_at":"2026-05-13T06:32:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"c36f18ae-c03e-4dc0-b9ef-046d8752d0b4","html_url":"https://github.com/m1ngsama/chopsticks","commit_stats":null,"previous_names":["m1ngsama/chopsticks"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/m1ngsama/chopsticks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m1ngsama%2Fchopsticks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m1ngsama%2Fchopsticks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m1ngsama%2Fchopsticks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m1ngsama%2Fchopsticks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m1ngsama","download_url":"https://codeload.github.com/m1ngsama/chopsticks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m1ngsama%2Fchopsticks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33289549,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-21T02:57:32.698Z","status":"ssl_error","status_checked_at":"2026-05-21T02:57:31.990Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ale","developer-tools","dotfiles","fzf","lsp","solarized","ssh","vim","vim-configuration","vimrc"],"created_at":"2025-08-01T23:18:19.115Z","updated_at":"2026-05-21T05:12:49.704Z","avatar_url":"https://github.com/m1ngsama.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/demo.gif\" alt=\"chopsticks demo\" width=\"720\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003echopsticks\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eVim for engineers. ~25 plugins, works over SSH.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square\" alt=\"MIT License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.vim.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Vim-8.1%2B-brightgreen?style=flat-square\" alt=\"Vim 8.1+\"\u003e\u003c/a\u003e\n  \u003ca href=\"#install\"\u003e\u003cimg src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey?style=flat-square\" alt=\"Platform\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/m1ngsama/chopsticks/actions\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/m1ngsama/chopsticks/test.yml?style=flat-square\u0026label=tests\" alt=\"Tests\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/m1ngsama/chopsticks/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/m1ngsama/chopsticks?style=flat-square\u0026color=orange\" alt=\"Release\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/m1ngsama/chopsticks/main/get.sh | bash\n```\n\n---\n\n## Why\n\nYou SSH into a server. You need to edit code. You want LSP, fuzzy find, git integration, format-on-save — not a 20-minute setup.\n\nchopsticks 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.\n\n**24–25 plugins** (tmux-navigator loads only inside tmux), LSP, linting, and a hand-built statusline. No bloat, no decorations, just tools.\n\n## What's in the box\n\n| Feature           | Description                                                                                                                                                    |\n| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **LSP**           | completion, go-to-def, hover, rename, code actions — pure VimScript ([vim-lsp](https://github.com/prabirshrestha/vim-lsp))                                     |\n| **Lint + format** | [ALE](https://github.com/dense-analysis/ale) runs black, prettier, goimports, rustfmt on save                                                                  |\n| **Fuzzy find**    | files, buffers, grep, tags, marks, commands — [FZF](https://github.com/junegunn/fzf.vim)                                                                       |\n| **Git**           | status, diff, blame, push, pull, conflict markers — [fugitive](https://github.com/tpope/vim-fugitive) + [gitgutter](https://github.com/airblade/vim-gitgutter) |\n| **Run file**      | `,cr` — auto-detects Python, Go, Rust, JS, C, Shell, and more                                                                                                  |\n| **Markdown**      | quiet writing defaults, browser preview (`,mp`), table of contents (`,mt`)                                                                                     |\n| **Diagnostics**   | `:ChopsticksStatus` — see what's installed, what's missing, how to fix it                                                                                      |\n| **TTY-aware**     | degrades gracefully on SSH, console, slow links — never breaks                                                                                                 |\n\n## Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/m1ngsama/chopsticks/main/get.sh | bash\ncurl -fsSL https://raw.githubusercontent.com/m1ngsama/chopsticks/main/get.sh | bash -s -- --profile=minimal\ncurl -fsSL https://raw.githubusercontent.com/m1ngsama/chopsticks/main/get.sh | bash -s -- --dry-run --profile=full\n```\n\nOr manually:\n\n```bash\ngit clone https://github.com/m1ngsama/chopsticks.git ~/.vim\ncd ~/.vim \u0026\u0026 ./install.sh --profile=engineer\n```\n\nSupports macOS (brew), Debian/Ubuntu (apt), Arch (pacman), Fedora (dnf).\nSet `CHOPSTICKS_DEST=/absolute/path` before running `get.sh` to install\nsomewhere other than `~/.vim`.\n\nFirst launch installs plugins automatically (30-60s). Restart vim when done.\nUse `./install.sh --dry-run --profile=full` to inspect the resolved profile and\nconfig path without changing files. Use `./install.sh --configure-only\n--profile=minimal` to switch profiles without reinstalling plugins or tools.\n\n## Profiles\n\nDefault profile: `engineer`. Interactive installs ask for this profile before\nplugins are installed; `--profile=minimal`, `--profile=engineer`, or\n`--profile=full` selects it without prompting. `--yes` keeps the existing local\nprofile or uses `engineer`.\n\n```vim\n\" Put this in ${XDG_CONFIG_HOME:-~/.config}/chopsticks.vim.\nlet g:chopsticks_profile = 'minimal'   \" core navigation/editing/git/markdown\nlet g:chopsticks_profile = 'engineer'  \" default: LSP, ALE, syntax extras\nlet g:chopsticks_profile = 'full'      \" engineer + heavier Markdown feedback\nlet g:chopsticks_enable_jk_escape = 1  \" optional: insert-mode jk exits insert\nlet g:chopsticks_enable_ctrl_s_save = 1 \" optional: Ctrl-S saves\nlet g:chopsticks_enable_sudo_save_bang = 1 \" optional: :w!! sudo save\nlet g:chopsticks_enable_completion_keymaps = 1 \" optional: Tab/Enter completion\nlet g:chopsticks_enable_auto_pairs = 1 \" optional: automatic pair insertion\nlet g:chopsticks_enable_terminal_keymaps = 1 \" optional: terminal Esc/Ctrl navigation\nlet g:chopsticks_enable_exrc = 1 \" optional: source project-local .vimrc/.exrc from CWD\nlet g:chopsticks_enable_reindent_file = 1 \" optional: ,F reindents the entire file\n```\n\n`minimal` avoids LSP, ALE, completion plugins, extra language syntax plugins,\nStartify, UndoTree, and browser Markdown preview. `full` keeps those and opts\ninto Markdown lint, format, spell, conceal, Marksman, and LSP virtual text.\n\nProject updates leave `~/.config/chopsticks.vim` alone, so put local choices\nthere instead of editing the managed `.vimrc`. The `,?` cheat sheet follows the\nactive profile and only shows keys for enabled features.\n\n## Keys\n\nLeader: `,`\n\n```\n,ff       fuzzy find file          ,dd   go to definition\n,rg       ripgrep project          ,dk   hover docs\n,e        toggle file sidebar      ,cr   run current file\n,gs       git status               ,f    format\n,w        save                     ,q    quit\nEsc       exit insert mode         ,?    cheat sheet\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAll keybindings\u003c/strong\u003e\u003c/summary\u003e\n\n### Files\n\n`,ff` find | `,b` buffers | `,rg` grep | `,rG` grep word | `,fh` recent | `,fl` lines | `,e` browser | `,E` browser (file dir) | `,,` last file\n\n### Code\n\n`,dd` def | `,dt` type | `,di` impl | `,dr` refs | `,dk` docs | `,dp` `,dn` diagnostics | `[e` `]e` ALE errors | `,rn` rename | `,ca` action | `,o` outline | `,cr` run\n\n### Edit\n\n`,S`+2ch jump | `gc` comment | `cs\"'` surround | `Alt+j/k` move line | `,u` undo tree | `,y` clipboard | `,*` replace word | `,F` re-indent (v) | `,W` strip whitespace | `[\u003cSpace\u003e` `]\u003cSpace\u003e` blank lines\n\n### Git\n\n`,gs` status | `,gd` diff | `,gb` blame | `,gc` commit | `,gp` push | `,gl` pull | `,gL` log graph | `,gC` FZF commits | `,gB` buffer commits | `]x` `[x` conflict\n\n### Windows\n\n`\u003cC-w\u003ehjkl` navigate | `,z` maximize | `,h` `,l` buffers | `,bd` close buffer | `,=` `,−` resize | `,tv` `,th` terminal\n\n### Markdown\n\n`,mp` preview in browser | `,mt` table of contents\n\n### Toggle\n\n`F2` paste | `F3` line numbers | `F4` relative numbers | `F6` invisible chars | `,ss` spell check | `,af` format on save\n\n### Utilities\n\n`,cp` copy full path | `,cf` copy filename | `,ev` edit vimrc | `,sv` reload vimrc | `,wa` save all | `:ChopsticksStatus` diagnostics\n\n\u003c/details\u003e\n\n## LSP\n\n```vim\n:LspInstallServer    \" auto-detects filetype\n:LspStatus           \" check what's running\n:ChopsticksStatus    \" see all tools + LSP + linters at a glance\n```\n\npylsp, gopls, rust-analyzer, clangd, sqls — no Node.js. JS/TS servers need Node.\nMarkdown LSP (`marksman`) is opt-in so prose buffers stay quiet by default.\n\nALE and vim-lsp coexist cleanly (`ale_disable_lsp=1`). ALE handles linting + formatting. vim-lsp handles everything else.\n\n## Markdown\n\nMarkdown opens in writing mode: wrapped text, no spell noise, no concealed\nsyntax, no sign column, no real-time markdownlint, and no Marksman diagnostics.\nThe explicit commands still work:\n\n```vim\n,mp    \" preview in browser\n,mt    \" table of contents\n```\n\nOpt into heavier Markdown tooling from your own vimrc before loading\nchopsticks:\n\n```vim\nlet g:chopsticks_markdown_lint = 1\nlet g:chopsticks_markdown_format_on_save = 1\nlet g:chopsticks_markdown_lsp = 1\nlet g:chopsticks_markdown_spell = 1\nlet g:chopsticks_markdown_conceal = 1\nlet g:previm_enable_realtime = 1\n```\n\nFor Markdown LSP, install or select `marksman` first.\n\n## Architecture\n\n```\n~/.vim/\n├── .vimrc              thin loader\n├── modules/\n│   ├── env.vim         TTY detection, truecolor, skip built-in plugins\n│   ├── plugins.vim     vim-plug + 24–25 plugins\n│   ├── core.vim        settings, keymaps, performance\n│   ├── ui.vim          solarized, statusline, startify\n│   ├── editing.vim     easymotion, yank highlight, blank lines\n│   ├── navigation.vim  fzf, netrw sidebar, windows, terminal\n│   ├── lsp.vim         vim-lsp, asyncomplete\n│   ├── lint.vim        ale, format-on-save\n│   ├── git.vim         fugitive, gitgutter, conflict nav\n│   ├── languages.vim   vim-go, markdown, filetype settings\n│   └── tools.vim       run file, quickfix, cheat sheet, diagnostics\n```\n\nEach module is self-contained. Comment out one line in `.vimrc` to disable it. Add your own with `call s:load('mine')`.\n\n## Performance\n\n| Metric                   | Value                                       |\n| ------------------------ | ------------------------------------------- |\n| Lazy-loaded              | 7 plugins (on command or filetype)          |\n| Built-in plugins skipped | 12 (gzip, tar, zip, vimball, logiPat, etc.) |\n| Large file threshold     | 10MB (auto-disables syntax + undo)          |\n| TTY large file           | 500KB (syntax disabled)                     |\n\n## Troubleshooting\n\n| Problem             | Fix                                           |\n| ------------------- | --------------------------------------------- |\n| Plugins not loading | `:PlugInstall` then `:PlugUpdate`             |\n| LSP not starting    | `:LspInstallServer` for current filetype      |\n| Colors wrong        | `export COLORTERM=truecolor` in shell rc      |\n| Optional `Ctrl+s` freezes | `stty -ixon` in shell rc                |\n| Everything slow     | Large file? Auto-disabled \u003e10MB               |\n| What's installed?   | `:ChopsticksStatus` shows tools, LSP, linters |\n\nMore in the [wiki](https://github.com/m1ngsama/chopsticks/wiki).\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md). The two rules that matter: no Node.js in the Vim runtime, and don't regress startup time.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm1ngsama%2Fchopsticks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm1ngsama%2Fchopsticks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm1ngsama%2Fchopsticks/lists"}