mirror of
https://github.com/m1ngsama/chopsticks.git
synced 2026-03-25 18:33:49 +00:00
合并 PR #5:tiered LSP backend (CoC/vim-lsp), vim-which-key, vim-startify, indentLine, 修复按键冲突,UX 改进。
138 lines
4.1 KiB
Bash
Executable file
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 ""
|