#!/bin/bash # 导入公共函数 source "$(dirname "$0")/../utils/common.sh" # 检查neovim版本 check_neovim() { log_info "检查Neovim是否已安装..." if ! command -v nvim &> /dev/null; then log_error "Neovim未安装,请先运行 neovim.sh" exit 1 fi # 检查版本是否 >= 0.10.0 local nvim_version=$(nvim --version | head -n1 | cut -d ' ' -f2) if [ "$(echo -e "${nvim_version}\n0.10.0" | sort -V | head -n1)" != "0.10.0" ]; then log_error "Neovim版本必须 >= 0.10.0,当前版本: ${nvim_version}" log_info "正在安装最新版本的Neovim..." # 下载最新版本的Neovim curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz # 删除旧的安装 sudo rm -rf /opt/nvim # 解压到/opt目录 sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz # 删除下载的压缩包 rm nvim-linux-linux-x86_64.tar.gz # 创建符号链接 sudo ln -sf /opt/nvim-linux-x86_64/bin/nvim /usr/local/bin/nvim # 重新检查版本 nvim_version=$(nvim --version | head -n1 | cut -d ' ' -f2) if [ "$(echo -e "${nvim_version}\n0.10.0" | sort -V | head -n1)" != "0.10.0" ]; then log_error "Neovim版本仍然不满足要求,尝试从源码编译安装..." # 安装编译依赖 sudo apt-get install -y ninja-build gettext cmake unzip curl # 克隆源码 git clone https://github.com/neovim/neovim cd neovim # 编译安装 make CMAKE_BUILD_TYPE=Release sudo make install # 返回上级目录 cd .. # 删除源码 rm -rf neovim # 再次检查版本 nvim_version=$(nvim --version | head -n1 | cut -d ' ' -f2) if [ "$(echo -e "${nvim_version}\n0.10.0" | sort -V | head -n1)" != "0.10.0" ]; then log_error "Neovim版本仍然不满足要求,请手动安装最新版本" exit 1 fi fi fi log_success "Neovim版本检查通过: ${nvim_version}" } # 备份现有配置 backup_config() { log_info "备份现有配置..." # 检查是否存在配置目录 if [ -d "${USER_HOME}/.config/nvim" ]; then # 创建备份目录 local backup_dir="${USER_HOME}/.config/nvim.backup.$(date +%Y%m%d_%H%M%S)" log_info "备份原配置到: $backup_dir" # 移动现有配置到备份目录 mv "${USER_HOME}/.config/nvim" "$backup_dir" fi # 确保删除所有可能存在的缓存和配置 log_info "清理旧配置和缓存..." rm -rf "${USER_HOME}/.config/nvim" rm -rf "${USER_HOME}/.local/share/nvim" rm -rf "${USER_HOME}/.cache/nvim" rm -rf "${USER_HOME}/.local/state/nvim" rm -rf "${USER_HOME}/.local/share/lazy" rm -rf "${USER_HOME}/.local/share/nvim" rm -rf "${USER_HOME}/.local/state/nvim" rm -rf "${USER_HOME}/.cache/nvim" # 确保目录存在且权限正确 mkdir -p "${USER_HOME}/.config/nvim" chown -R $CURRENT_USER:$CURRENT_USER "${USER_HOME}/.config/nvim" } # 安装NvChad install_nvchad() { log_info "安装NvChad..." # 确保目录存在且权限正确 sudo mkdir -p "${USER_HOME}/.config/nvim" sudo chown -R $CURRENT_USER:$CURRENT_USER "${USER_HOME}/.config/nvim" # 使用当前用户克隆starter仓库 su - $CURRENT_USER -c "git clone https://github.com/NvChad/starter ${USER_HOME}/.config/nvim" # 删除.git文件夹 rm -rf "${USER_HOME}/.config/nvim/.git" # 确保目录权限正确 sudo chown -R $CURRENT_USER:$CURRENT_USER "${USER_HOME}/.config/nvim" if [ $? -eq 0 ]; then log_success "NvChad安装成功" else log_error "NvChad安装失败" exit 1 fi } # 配置NvChad configure_nvchad() { log_info "配置NvChad..." # 创建自定义配置目录 su - $CURRENT_USER -c "mkdir -p ${USER_HOME}/.config/nvim/lua/custom/configs" # 创建自定义chadrc.lua cat > "${USER_HOME}/.config/nvim/lua/custom/chadrc.lua" << 'EOF' ---@type ChadrcConfig local M = {} -- UI配置 M.ui = { theme = 'catppuccin', transparency = false, -- 性能优化相关设置 statusline = { theme = "minimal", -- minimal主题性能更好 separator_style = "default", overriden_modules = nil, }, -- 延迟加载文件树 nvdash = { load_on_startup = false, }, -- 禁用不必要的图标 hl_override = { Comment = { italic = false }, }, } -- 插件配置 M.plugins = "custom.plugins" -- 映射配置 M.mappings = require "custom.mappings" return M EOF # 创建插件配置文件 cat > "${USER_HOME}/.config/nvim/lua/custom/plugins.lua" << 'EOF' local plugins = { { "nvim-treesitter/nvim-treesitter", opts = { ensure_installed = { "lua", "vim", "bash" }, -- 只安装最基础的语言支持 sync_install = false, -- 异步安装 auto_install = false, -- 禁用自动安装 highlight = { enable = true, disable = function(_, buf) local max_filesize = 100 * 1024 -- 100 KB local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf)) if ok and stats and stats.size > max_filesize then return true end end, additional_vim_regex_highlighting = false, }, }, }, { "williamboman/mason.nvim", opts = { ensure_installed = {}, -- 按需安装LSP PATH = "skip", ui = { border = "none", icons = { package_installed = "✓", package_pending = "➜", package_uninstalled = "✗" }, keymaps = { toggle_server_expand = "", install_server = "i", update_server = "u", check_server_version = "c", update_all_servers = "U", check_outdated_servers = "C", uninstall_server = "X", cancel_installation = "", }, }, }, }, { "nvim-telescope/telescope.nvim", opts = function() local conf = require "plugins.configs.telescope" conf.defaults.file_ignore_patterns = { "node_modules", "build", "dist", "yarn.lock", ".git", } conf.defaults.vimgrep_arguments = { "rg", "--color=never", "--no-heading", "--with-filename", "--line-number", "--column", "--smart-case", "--hidden", } conf.pickers = { find_files = { find_command = { "fd", "--type", "f", "--strip-cwd-prefix" } }, } return conf end, }, } return plugins EOF # 创建按键映射配置文件 cat > "${USER_HOME}/.config/nvim/lua/custom/mappings.lua" << 'EOF' local M = {} M.general = { n = { ["ff"] = { " Telescope find_files ", "查找文件" }, ["fg"] = { " Telescope live_grep ", "全局搜索" }, ["fb"] = { " Telescope buffers ", "查找缓冲区" }, ["fh"] = { " Telescope help_tags ", "帮助标签" }, }, } return M EOF # 创建性能优化配置文件 cat > "${USER_HOME}/.config/nvim/lua/custom/configs/performance.lua" << 'EOF' local M = {} -- 性能优化设置 M.setup = function() -- 禁用一些内置的vim插件 local disabled_built_ins = { "2html_plugin", "getscript", "getscriptPlugin", "gzip", "logipat", "netrw", "netrwPlugin", "netrwSettings", "netrwFileHandlers", "matchit", "tar", "tarPlugin", "rrhelper", "spellfile_plugin", "vimball", "vimballPlugin", "zip", "zipPlugin", "tutor", "rplugin", "syntax", "synmenu", "optwin", "compiler", "bugreport", "ftplugin", } for _, plugin in pairs(disabled_built_ins) do vim.g["loaded_" .. plugin] = 1 end -- 设置python主机 vim.g.python3_host_prog = vim.fn.exepath('python3') vim.g.loaded_python_provider = 0 -- 优化启动时间 vim.loader.enable() -- UI性能优化 vim.opt.lazyredraw = true vim.opt.shadafile = "NONE" vim.opt.updatetime = 300 vim.opt.timeoutlen = 500 vim.opt.redrawtime = 1500 vim.opt.synmaxcol = 200 vim.opt.laststatus = 2 -- 禁用一些不必要的状态更新 vim.opt.ruler = false vim.opt.showcmd = false -- 使用新的正则引擎 vim.opt.regexpengine = 1 -- 设置更快的macro执行 vim.opt.maxmapdepth = 1000 -- 优化滚动性能 vim.opt.scrolljump = 5 -- 优化文件打开性能 vim.opt.hidden = true end return M EOF # 设置权限 chown -R $CURRENT_USER:$CURRENT_USER "${USER_HOME}/.config/nvim" } # 检查并安装依赖 install_base_dependencies() { log_info "检查并安装依赖..." # 安装基础依赖 local dependencies=( "git" "ripgrep" "gcc" "make" ) for dep in "${dependencies[@]}"; do if ! command -v $dep &> /dev/null; then log_info "安装 $dep..." apt-get install -y $dep else log_info "$dep 已安装" fi done } # 主函数 main() { # 检查root权限 check_root # 获取用户信息 get_user_info # 检查neovim版本 check_neovim # 检查并安装依赖 install_base_dependencies # 备份现有配置 backup_config # 安装NvChad install_nvchad # 配置NvChad configure_nvchad log_success "NvChad安装完成!" log_info "请按照以下步骤完成配置:" log_info "1. 运行 nvim 启动编辑器" log_info "2. 等待 lazy.nvim 完成插件下载" log_info "3. 运行 :MasonInstallAll 命令安装所有工具" log_info "4. 使用 :h nvui 学习 UI 和 base46 的自定义配置" log_info "5. 确保终端字体设置为 'JetBrainsMono Nerd Font'(不要选择带Mono后缀的版本)" } # 执行主函数 main