.vimrc:
- Remove global eventignore+=FileType corruption in large file handler
- Add t_8f/t_8b for tmux true color support
- Fix vnoremap J/K shadowing built-in J (join); use Alt+j/k in visual mode
- Replace map with nnoremap for buffer/tab/spell/misc mappings (prevents
visual/operator-pending mode contamination)
- Change BufEnter to FileType for formatoptions (fires less frequently)
- Remove duplicate whitespace trim (ALE already handles it via fix_on_save)
- Guard <leader>so to only source vim files
- Guard <leader>cp/<leader>cf with has('clipboard')
- Add completeopt=popup for floating completion docs (Vim 8.1.1517+)
- Change Startify header from "MINGSAMA" to "chopsticks"
- Make Startify bookmarks conditional (only show shell rc files that exist)
- EasyMotion <Leader>j/k: map → nmap (prevent visual mode leak)
- Move-line: nnoremap instead of nmap for normal mode variant
install.sh:
- Add --help flag
- Support NO_COLOR and non-TTY output (no ANSI codes when redirected)
- Include $BASH_COMMAND in ERR trap for better debugging
- Use mktemp for secure temp files instead of predictable /tmp paths
- Warn user when pip falls back to --break-system-packages
README:
- Add missing mappings: jk, F2-F6, gV, //, ,ev, ,sv, ,cp, ,cf, ,*, ,F, ,W, ,ms, ,ss
- Note that some language servers require Node.js even though vim-lsp doesn't
- Clarify Alt+j/k works in both normal and visual mode
.vimrc:
- Fix syntax=OFF no-op in large file handler (syntax= is correct)
- Fix <leader>rG broken -F flag (new RgWord command with -F before --)
- Fix :Gdiff → :Gdiffsplit (fugitive v3+ compat)
- Fix go_def_mode/go_info_mode conflicting with go_gopls_enabled=0
- Fix <leader>m prefix collision with mt/mp (renamed to <leader>ms)
- Wrap PlugInstall autocmd in augroup (prevent doubling on re-source)
install.sh:
- Guard against empty version string in hadolint/marksman downloads
- Add HAS_SUDO check in _do_binary_apt before sudo mv
- Add PlugClean warning when existing plugins directory is non-empty
- Fix pkg_install brew-first priority (macOS-only now, Linux fallback)
- Fix menu double-draw flicker on first render
- Fix Fedora deselected tools not tracked in SKIPPED array
docs:
- Remove nonexistent nvm install step from README
- Fix TOC description (side window, not quickfix) in README/QUICKSTART
- Fix TTY detection description (add dumb, empty, builtin)
- Add missing ,cd and ,wa mappings to README
- Remove dead CoC formatOnSaveFiletypes from coc-settings.json
.vimrc:
- TTY detection: add empty($TERM) and dumb — fixes black screen when
TERM is unset (non-interactive SSH, minimal environments)
- Replace StartifyHeader() with a static ASCII list — removes the
synchronous system('git ...') call that caused the black screen while
vim waited for git before rendering, and removes Unicode block chars
(███╗) that rendered as garbage on terminals without full UTF-8
install.sh:
- _vim_run() helper: uses </dev/tty when accessible so vim properly
manages the alternate screen buffer and restores terminal state on
exit — this was the root cause of garbled output after PlugInstall
and CocInstall steps; falls back to --not-a-term for CI environments
- Remove 'screen may go dark' warning — no longer needed since terminal
state is properly managed via /dev/tty
Remove CHANGELOG.md — use git log
[[ -e /dev/tty ]] returns true even in non-interactive SSH sessions
where the device file exists but cannot actually be opened, causing
'No such device or address' errors. Replace with { true </dev/tty; }
which tests actual openability before redirecting.
install.sh:
- set -eo pipefail + trap ERR with line number and debug hint
- Network connectivity check before any downloads
- curl and git preflight: auto-install or die with clear instructions
- vim auto-install attempt before dying
- sudo availability check (one-time auth, graceful skip when unavailable)
- macOS: offer to install Homebrew if missing
- Node.js: offer nvm install if missing (with fallback to vim-lsp)
- Python3: offer install if missing
- ask() reads from /dev/tty — interactive prompts work under curl | bash
- safe_download(): verifies file non-empty and not an HTML error page
- pkg_install(): unified cross-platform helper (brew/apt/pacman/dnf)
- arch_github()/arch_linux_x64(): normalize uname -m (handles aarch64)
- Temp files cleaned up via EXIT trap
- Symlink creation verified after ln -sf
- vim-plug: fallback to git clone if curl fails; verify file non-empty
- vim +PlugInstall: warn on failure instead of silent continue
- Binary downloads (hadolint, marksman) use named temp files
get.sh (new):
- One-command bootstrap: curl | bash
- Installs git if missing
- Clones repo to ~/.vim (or git pull if already present)
- exec bash install.sh </dev/tty so interactive prompts work correctly
.vimrc:
- Wrap all loose autocmds in named augroups with autocmd! (prevents
doubling on :source $MYVIMRC): ChopstickTabHistory, ChopstickResize,
ChopstickStdin, CocHighlight, ChopstickCleanup, ChopstickFiletype,
ChopstickTTYLargeFile, ChopstickWhichKey, ChopstickStartify
install.sh:
- Add Arch Linux (pacman) branch for system tools
- Add hadolint to system tools (brew/apt binary download/pacman)
- Add staticcheck to Go tools
- Add yamllint to pip tools
- Remove sqlfmt from npm (SQL unified to sqlfluff via pip)
- Remove coc-marksman (package does not exist on npm)
- Add coc-settings.json symlink step with backup
- Add pip3 bootstrap when python3 present but pip3 absent
- Fix PlugInstall and CocInstall to use </dev/null (TTY-safe)
coc-settings.json:
- New file: configures marksman as Markdown LSP server for CoC
(replaces the broken coc-marksman npm package approach)
Rewrite install.sh from a tool-listing script into an actual installer.
Tools are now installed automatically in grouped, prompted steps.
New sections:
- System tools (ripgrep, fzf, ctags, shellcheck, marksman)
macOS: brew | Debian/Ubuntu: apt | Fedora: dnf
marksman on Linux: auto-downloads binary from GitHub releases
- npm tools (prettier, markdownlint-cli, stylelint,
stylelint-config-standard, eslint, typescript, sqlfmt)
- Python tools (black, isort, flake8, pylint, sqlfluff)
- Go tools (gopls, goimports)
Adds GOPATH/bin to PATH for the session; warns if not in shell profile
- CoC language server extensions (unchanged, now last step)
Other changes:
- --yes flag for non-interactive/CI installs
- try_install / pip_install / npm_install / go_install helpers with
already-installed detection to avoid redundant reinstalls
- End-of-run summary: Installed / Skipped / Failed lists
- Symlink step now always points to $SCRIPT_DIR/.vimrc (the repo),
ensuring the right version is always linked regardless of clone path
This commit addresses multiple issues discovered during code review:
1. Fix variable definition order in .vimrc
- Move g:is_tty and g:has_true_color definitions to top of file
- Previously used at line 32 but defined at line 263
- Ensures variables are available before first use
2. Remove duplicate configuration settings in .vimrc
- Remove duplicate set number, wildmenu, ruler
- Remove duplicate search settings (ignorecase, smartcase, hlsearch, incsearch)
- Remove duplicate backspace and wildignore settings
- Reduces file size and eliminates confusion
3. Enhance install.sh reliability
- Add directory validation to ensure script runs from ~/.vim
- Add symlink validation after creation
- Fix CoC installation command syntax (vim -c to vim +)
- Move helper functions before usage
- Prevents symlink-to-self errors
4. Improve installation documentation
- Add warnings in README.md about running from correct directory
- Add IMPORTANT notes in QUICKSTART.md
- Update installation step descriptions
- Prevents common user installation mistakes
These fixes improve installation reliability and prevent configuration errors.
Changes:
- Replaced checkmarks with plain text in README.md
- Replaced emoji icons with [OK] in install.sh
- Changed ALE error/warning signs from unicode to ASCII (X and !)
- Removed rocket emoji from QUICKSTART.md
- All output now uses simple ASCII characters
Follows KISS (Keep It Simple, Stupid) principle for better:
- Terminal compatibility
- Accessibility
- Readability in all environments
- No font dependencies