feat: 完成 Zsh 插件配置脚本的优化和测试 - 修复 autojump 配置冲突 - 清理重复的插件安装 - 优化脚本结构和注释 feat: 优化shell脚本 - 1. 增强错误处理和恢复机制 2. 添加网络连接优化和镜像源支持 3. 改进进度显示和用户交互 4. 优化配置文件管理和备份 5. 改进插件管理机制 6. 增强依赖检查和安装 7. 添加完整的日志记录功能 8. 修复字体安装相关问题 docs: 完善shell、system和utils部分的README文档 - 1. 添加详细的脚本说明和使用方法 2. 补充依赖要求和注意事项 3. 添加常见问题解答 4. 更新版本日志 feat(editor): 优化 neovim 和 nvchad 安装脚本,添加性能优化配置和详细文档 feat: 优化Python开发环境安装脚本,分离基础包和机器学习包,修复virtualenvwrapper配置 feat: 优化开发工具安装脚本,统一使用common.sh中的函数,改进错误处理 fix: 修复DNMP安装脚本,跳过自动配置PHP开发环境 fix: 提交删除的 init.sh 和 mysql.sh 文件
402 lines
10 KiB
Bash
402 lines
10 KiB
Bash
#!/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 = "<CR>",
|
||
install_server = "i",
|
||
update_server = "u",
|
||
check_server_version = "c",
|
||
update_all_servers = "U",
|
||
check_outdated_servers = "C",
|
||
uninstall_server = "X",
|
||
cancel_installation = "<C-c>",
|
||
},
|
||
},
|
||
},
|
||
},
|
||
|
||
{
|
||
"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 = {
|
||
["<leader>ff"] = { "<cmd> Telescope find_files <cr>", "查找文件" },
|
||
["<leader>fg"] = { "<cmd> Telescope live_grep <cr>", "全局搜索" },
|
||
["<leader>fb"] = { "<cmd> Telescope buffers <cr>", "查找缓冲区" },
|
||
["<leader>fh"] = { "<cmd> Telescope help_tags <cr>", "帮助标签" },
|
||
},
|
||
}
|
||
|
||
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 |