diff --git a/.vimrc b/.vimrc index b59391a..e4c69e1 100644 --- a/.vimrc +++ b/.vimrc @@ -11,7 +11,7 @@ set nocompatible " Detect terminal type and capabilities (must be early for conditional configs) -let g:is_tty = ($TERM =~ 'linux' || $TERM =~ 'screen' || &term =~ 'builtin') +let g:is_tty = empty($TERM) || $TERM ==# 'dumb' || $TERM =~# 'linux' || $TERM =~# 'screen' || &term =~# 'builtin' let g:has_true_color = ($COLORTERM == 'truecolor' || $COLORTERM == '24bit') " Enable type file detection. Vim will be able to try to detect the type of file in use @@ -1403,42 +1403,14 @@ endif " ============================================================================ if exists('g:plugs["vim-startify"]') - " Centered dashboard header — matches neovim startup aesthetic - function! StartifyHeader() abort - let l:art = [ - \ '███╗ ███╗ ██╗███╗ ██╗ ██████╗ ███████╗ █████╗ ███╗ ███╗ █████╗ ', - \ '████╗ ████║███║████╗ ██║██╔════╝ ██╔════╝██╔══██╗████╗ ████║██╔══██╗', - \ '██╔████╔██║╚██║██╔██╗ ██║██║ ███╗███████╗███████║██╔████╔██║███████║ ', - \ '██║╚██╔╝██║ ██║██║╚██╗██║██║ ██║╚════██║██╔══██║██║╚██╔╝██║██╔══██║', - \ '██║ ╚═╝ ██║ ██║██║ ╚████║╚██████╔╝███████║██║ ██║██║ ╚═╝ ██║██║ ██║', - \ '╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝', - \ ] - let l:art_w = 71 - let l:pad = max([0, (winwidth(0) - l:art_w) / 2]) - let l:indent = repeat(' ', l:pad) - let l:lines = [] - for l:line in l:art - call add(l:lines, l:indent . l:line) - endfor - " Info subheader: vim version + cwd + git branch - let l:ver = 'Vim ' . (v:version / 100) . '.' . printf('%02d', v:version % 100) - let l:cwd = fnamemodify(getcwd(), ':t') - let l:git = '' - if executable('git') - let l:branch = system('git -C ' . shellescape(getcwd()) . - \ ' rev-parse --abbrev-ref HEAD 2>/dev/null') - if v:shell_error == 0 - let l:git = ' [' . substitute(l:branch, '\n\+$', '', '') . ']' - endif - endif - let l:info = l:ver . ' ' . l:cwd . l:git - let l:info_pad = max([0, (winwidth(0) - len(l:info)) / 2]) - call add(l:lines, '') - call add(l:lines, repeat(' ', l:info_pad) . l:info) - call add(l:lines, '') - return l:lines - endfunction - let g:startify_custom_header = 'StartifyHeader()' + " Plain ASCII header — no Unicode, no system() calls, instant render + let g:startify_custom_header = [ + \ ' __ __ ___ ___ __ __ ____ ____ __ _ __ __ __ ', + \ ' / \/ \/ _ \/ _ \ / \/ \/ ___)/ ___)/__\ / |/ \/ \/ \ ', + \ ' ) )( ( ) (_) )(_) ) )( ( \___ \\__ ( _/ ) |( _)( __/ /\ \ ', + \ ' /_/ \__/ \___/\___//_/ \__/ (____/(____/\___)_/ \_/\_/ \_/ \/ \/', + \ '', + \ ] " Sessions first, then recent files — mirrors dashboard plugin ordering let g:startify_lists = [ diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index ead6886..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,211 +0,0 @@ -# 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 `git` if missing (apt / pacman / dnf / brew) - - Clones repo to `~/.vim`; `git pull` if already present - - `exec bash install.sh /`** — navigate command-line history matching typed prefix (amix, spf13) -- **`e :Explore`** — open built-in Netrw file browser; works on any Vim without plugins -- **`cd`** — change window-local CWD to current file's directory (was `wd`) -- **`sv`** — reloads vimrc and echoes confirmation - -### Changed - -- `wd` renamed to `cd`; now uses `lcd` (window-local) instead of `cd` (global) -- `wildignore` expanded 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` → `Esc`** in insert mode — ergonomic escape without reaching for the key -- **`Ctrl+s` save** in normal and insert mode (add `stty -ixon` to shell rc to enable - in terminals that use XON/XOFF flow control) -- **`//` visual search** — search for visually selected text using `\V` very-nomagic escaping -- **`p` / `P`** — paste from system clipboard after/before cursor -- **`rG`** — ripgrep word under cursor with `-F` (literal, not regex) -- **`u`** — leader-key alias for UndoTree (complements `F5`) -- **`tt`** — leader-key alias for Tagbar (complements `F8`) -- **`,?` in-Vim cheat sheet** — opens a read-only buffer covering modes, survival - commands, search, code intelligence, git, and clipboard; press `q` to close -- **vim-tmux-navigator** plugin — `Ctrl+h/j/k/l` navigates seamlessly across Vim - splits and tmux panes without a prefix key -- **`install.sh` tmux step** — detects tmux and optionally appends the four - navigator `bind-key` lines to `~/.tmux.conf`; warns about `C-l`/screen-clear tradeoff -- **`install.sh` survival guide** — post-install output now shows the 4 essential - commands for first-time Vim users, plus the `stty -ixon` advisory -- **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 = 0`** in `LargeFileSettings()` — ALE no longer spawns - linter subprocesses for files over 10 MB - -### Changed - -- **ALE lint triggers** — `ale_lint_on_text_changed` changed from `'never'` to `'normal'`; - `ale_lint_on_insert_leave` and `ale_lint_on_enter` changed from `0` to `1` — diagnostics - now refresh on buffer enter and after edits settle in normal mode -- **`` manual maps removed** — vim-tmux-navigator owns these keys at - plugin load time; the previous hand-rolled `` maps were unreachable dead code -- **`pp` paste-mode toggle removed** — functionally identical to the existing - `F2` pastetoggle; its presence caused a 500 ms delay on every `p` paste - -### Fixed - -- **ALE navigation direction reversed** — `[e` now correctly calls `ALEPrevious` - and `]e` calls `ALENext`, matching the vim-unimpaired `[`/`]` convention -- **`rG` regex 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 -- **`hadolint`** added to system tools installation (Dockerfile linting) -- **`staticcheck`** added to Go tools (replaces archived `golint`) -- **`yamllint`** added to pip tools (YAML linting) -- **`coc-settings.json`** — configures `marksman` as Markdown LSP for CoC via - `languageserver` entry; symlinked automatically by `install.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 loose `autocmd` statements now wrapped - with `autocmd!` to prevent doubling on `:source $MYVIMRC`: - `ChopstickTabHistory`, `ChopstickResize`, `ChopstickStdin`, `CocHighlight`, - `ChopstickCleanup`, `ChopstickFiletype`, `ChopstickTTYLargeFile`, - `ChopstickWhichKey`, `ChopstickStartify` -- **TTY-safe plugin install** — `vim +PlugInstall +qall ` in special buffers) — all `` usages guarded - with `!empty(expand(''))` and `empty(&buftype)` checks -- **`g:go_def_mode` conflict** — now conditional: uses `gopls` when CoC active, - `godef` when vim-lsp active (avoids error when gopls is disabled) -- **vim startup UX** — NERDTree + Startify layout for `vim .` and bare `vim` -- **`coc-marksman` silent failure** — package does not exist on npm; replaced with - native `languageserver` configuration in `coc-settings.json` -- **CoC startup warning** in no-node environments — `g:coc_start_at_startup = 0` - and `g:coc_disable_startup_warning = 1` set when `g: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.sh` overhaul** — automated installation of system tools, npm tools, - pip tools, Go tools, and CoC language server extensions with platform detection - and interactive prompts; `--yes` flag 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; bare `vim` - opens 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** — `.vimrc` in project root auto-loaded via `set exrc` -- **Persistent undo** — `~/.vim/.undo/` with `undolevels=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_save` disabled 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 `set` options cleaned up -- `A` dead 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. diff --git a/install.sh b/install.sh index a0ddfff..b93b050 100755 --- a/install.sh +++ b/install.sh @@ -360,9 +360,17 @@ else fi step "Installing Vim plugins" -info "(Vim will open fullscreen to install plugins — screen may go dark for 10-30s, this is normal)" -# /dev/null; then + vim "$@" /dev/null + fi +} +if ! _vim_run +PlugInstall +qall; then warn "vim +PlugInstall exited non-zero — plugins may be partially installed" warn "Run :PlugInstall manually inside Vim if something looks wrong" else @@ -641,9 +649,9 @@ step "CoC language server extensions" if [[ $HAS_NODE -eq 1 ]]; then if ask "Install CoC language servers (LSP for all configured languages)?"; then - info "(Downloading CoC extensions via npm — screen may go dark for 1-3 minutes, this is normal)" + info "(Downloading CoC extensions via npm — this may take 1-3 minutes)" # Note: coc-marksman doesn't exist on npm — markdown LSP is handled via coc-settings.json - vim +'CocInstall -sync coc-json coc-tsserver coc-pyright coc-sh coc-html coc-css coc-yaml coc-go coc-rust-analyzer coc-sql' +qall