#!/bin/bash # 设置错误时立即退出 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 安装依赖 install_dependencies() { log_info "安装Neovim依赖..." apt-get install -y \ ninja-build \ gettext \ cmake \ unzip \ curl \ git \ nodejs \ npm \ python3-pip \ python3-venv \ ripgrep \ fd-find \ bat \ exa \ delta \ tree } # 安装Neovim install_neovim() { log_info "安装Neovim..." # 添加Neovim仓库 add-apt-repository -y ppa:neovim-ppa/unstable apt-get update # 安装Neovim apt-get install -y neovim # 创建配置目录 mkdir -p ~/.config/nvim } # 安装Python包 install_python_packages() { log_info "安装Python包..." # 创建虚拟环境 python3 -m venv ~/.local/share/nvim/venv # 激活虚拟环境并安装包 source ~/.local/share/nvim/venv/bin/activate pip install pynvim pip install black pip install isort pip install flake8 pip install mypy pip install jedi deactivate } # 安装Node.js包 install_node_packages() { log_info "安装Node.js包..." # 安装全局npm包 npm install -g neovim npm install -g typescript npm install -g ts-node npm install -g prettier npm install -g eslint } # 配置Neovim configure_neovim() { log_info "配置Neovim..." # 创建基本配置 cat > ~/.config/nvim/init.vim << EOF " 基本设置 set number set relativenumber set expandtab set tabstop=4 set shiftwidth=4 set softtabstop=4 set smartindent set nowrap set noswapfile set nobackup set undodir=~/.vim/undodir set undofile set incsearch set nohlsearch set ignorecase set smartcase set termguicolors set scrolloff=8 set signcolumn=yes set updatetime=50 set colorcolumn=80 set splitright set splitbelow " 设置leader键 let mapleader = " " " 设置文件类型检测 filetype plugin indent on " 设置语法高亮 syntax enable " 设置编码 set encoding=utf-8 set fileencoding=utf-8 set termencoding=utf-8 " 设置状态栏 set laststatus=2 set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} " 设置命令模式补全 set wildmenu set wildmode=list:longest,full " 设置历史记录 set history=1000 set undolevels=1000 " 设置鼠标支持 set mouse=a " 设置剪贴板 set clipboard=unnamedplus " 设置自动补全 set completeopt=menu,menuone,noselect " 设置终端颜色 set t_Co=256 set background=dark EOF } # 安装语言服务器 install_language_servers() { log_info "安装语言服务器..." # 安装各种语言的LSP服务器 npm install -g typescript-language-server npm install -g vscode-langservers-extracted npm install -g @tailwindcss/language-server npm install -g @prisma/language-server npm install -g graphql-language-service-cli npm install -g vscode-html-languageserver-bin npm install -g vscode-css-languageserver-bin npm install -g vscode-json-languageserver-bin npm install -g vscode-eslint-language-server npm install -g @typescript-eslint/parser npm install -g @typescript-eslint/eslint-plugin npm install -g eslint_d npm install -g prettier npm install -g stylelint npm install -g markdownlint-cli npm install -g yaml-language-server npm install -g dockerfile-language-server-nodejs npm install -g bash-language-server npm install -g vscode-langservers-extracted } # 主函数 main() { log_info "开始安装Neovim..." # 安装依赖 install_dependencies # 安装Neovim install_neovim # 安装Python包 install_python_packages # 安装Node.js包 install_node_packages # 配置Neovim configure_neovim # 安装语言服务器 install_language_servers log_info "Neovim安装完成!" log_info "请运行 nvim 来启动编辑器。" log_info "首次启动时会自动安装插件。" } # 执行主函数 main