chopsticks/install.sh
m1ngsama 323bf4a6b3
LSP 分层后端、UI 增强、UX 修复与完整文档
合并 PR #5:tiered LSP backend (CoC/vim-lsp), vim-which-key, vim-startify, indentLine, 修复按键冲突,UX 改进。
2026-02-21 12:30:06 +08:00

138 lines
4.1 KiB
Bash
Executable file

#!/usr/bin/env bash
# install.sh - chopsticks vim configuration installer
# Usage: cd ~/.vim && ./install.sh
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BOLD='\033[1m'
NC='\033[0m'
ok() { echo -e "${GREEN}[OK]${NC} $1"; }
warn() { echo -e "${YELLOW}[!]${NC} $1"; }
die() { echo -e "${RED}[ERR]${NC} $1" >&2; exit 1; }
step() { echo -e "\n${BOLD}==> $1${NC}"; }
echo -e "${BOLD}chopsticks - Vim Configuration Installer${NC}"
echo "----------------------------------------"
# --- Preflight checks ---
step "Checking environment"
[ -f "$SCRIPT_DIR/.vimrc" ] || die ".vimrc not found in $SCRIPT_DIR. Run from the cloned repo: cd ~/.vim && ./install.sh"
command -v vim >/dev/null 2>&1 || die "vim not found. Install it first:
Ubuntu/Debian: sudo apt install vim
Fedora: sudo dnf install vim
macOS: brew install vim"
VIM_VERSION=$(vim --version | head -n1)
ok "Found $VIM_VERSION"
# Check Vim version >= 8.0
vim --version | grep -q 'Vi IMproved 8\|Vi IMproved 9' || \
warn "Vim 8.0+ recommended for full LSP support. Some features may be missing."
# Detect Node.js for CoC
HAS_NODE=0
if command -v node >/dev/null 2>&1; then
NODE_VER=$(node --version)
ok "Node.js $NODE_VER detected - CoC LSP will be available"
HAS_NODE=1
else
warn "Node.js not found - will use vim-lsp (no Node.js required)"
echo " Install Node.js later to enable CoC: https://nodejs.org/en/download"
fi
# --- Symlink ---
step "Setting up ~/.vimrc symlink"
if [ -f "$HOME/.vimrc" ] && [ ! -L "$HOME/.vimrc" ]; then
TS=$(date +%Y%m%d_%H%M%S)
warn "Backing up existing ~/.vimrc to ~/.vimrc.backup.$TS"
mv "$HOME/.vimrc" "$HOME/.vimrc.backup.$TS"
fi
ln -sf "$SCRIPT_DIR/.vimrc" "$HOME/.vimrc"
if [ "$(readlink "$HOME/.vimrc")" = "$SCRIPT_DIR/.vimrc" ]; then
ok "~/.vimrc -> $SCRIPT_DIR/.vimrc"
else
die "Symlink verification failed"
fi
# --- vim-plug ---
step "Installing vim-plug"
VIM_PLUG="$HOME/.vim/autoload/plug.vim"
if [ ! -f "$VIM_PLUG" ]; then
curl -fLo "$VIM_PLUG" --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
ok "vim-plug installed"
else
ok "vim-plug already present"
fi
# --- Plugins ---
step "Installing Vim plugins"
vim +PlugInstall +qall
ok "Plugins installed"
# --- Optional: CoC language servers ---
echo ""
if [ "$HAS_NODE" -eq 1 ]; then
read -p "Install CoC language servers for common languages? [y/N] " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
step "Installing CoC language servers"
vim +'CocInstall -sync coc-json coc-tsserver coc-pyright coc-sh coc-html coc-css coc-yaml' +qall
ok "CoC language servers installed"
echo " Add more with :CocInstall coc-go coc-rust-analyzer etc."
fi
else
echo " To enable LSP without Node.js:"
echo " 1. Open a source file in Vim"
echo " 2. Run :LspInstallServer"
echo " 3. vim-lsp-settings will auto-install the right language server"
fi
# --- Done ---
echo ""
echo -e "${BOLD}========================================${NC}"
echo -e "${GREEN}Installation complete.${NC}"
echo -e "${BOLD}========================================${NC}"
echo ""
echo "Optional tools (install for best experience):"
echo ""
echo " ripgrep (,rg project search)"
echo " Ubuntu: sudo apt install ripgrep"
echo " macOS: brew install ripgrep"
echo ""
echo " fzf (Ctrl+p file search)"
echo " Ubuntu: sudo apt install fzf"
echo " macOS: brew install fzf"
echo ""
echo " ctags (F8 tag browser)"
echo " Ubuntu: sudo apt install universal-ctags"
echo " macOS: brew install universal-ctags"
echo ""
echo " Language linters:"
echo " Python: pip install black flake8 pylint isort"
echo " JS/TS: npm install -g prettier eslint typescript"
echo " Go: go install golang.org/x/tools/gopls@latest"
echo " Shell: sudo apt install shellcheck"
echo ""
echo "Getting started:"
echo " See QUICKSTART.md for the 5-minute guide"
echo " Run 'vim' and press ',' then wait 500ms for keybinding hints"
echo ""