From ce91b6eaa659fa29f6b0c175623ff1721292616e Mon Sep 17 00:00:00 2001 From: xunmi-pc <寻觅> Date: Wed, 6 Mar 2024 17:59:32 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E]=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9B=B4=E5=A4=9A=E7=9A=84vim=E4=BE=9D=E8=B5=96,=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96vim=E4=BD=BF=E7=94=A8=E4=BD=93=E9=AA=8C,=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 32 ++++--- 公共/函数.zsh | 6 +- 公共/包管.zsh | 8 +- 安装.zsh | 161 +++++++++++++++++--------------- 测试.zsh | 218 ------------------------------------------- 配置/vimrc | 55 +++++++---- 配置/vim配置说明.vim | 7 ++ 7 files changed, 158 insertions(+), 329 deletions(-) delete mode 100755 测试.zsh create mode 100644 配置/vim配置说明.vim diff --git a/README.md b/README.md index bd713bf..49fbcf2 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,29 @@ # 介绍 -欢迎使用 言灵(effective language) 本工具用于在 `龙`(Loong) 架构和其他常用主机架构上的Linux系统中自动配置一个便捷好用的命令行, 使用zsh替代老旧的bash, 使用一些现代化的工具替代老旧工具集, 并且将部分命令添加汉化别名, 避免长时间未使用时遗忘命令 +欢迎使用 言灵(effective language) 本工具用于在 `龙`(Loong) 架构和其他常用主机架构上的Linux系统中自动配置一个便捷好用的命令行 +使用zsh替代老旧的bash, 使用一些现代化的工具替代老旧工具集, 并且将部分命令添加汉化别名, 避免长时间未使用时遗忘命令 -本脚本主体使用zsh脚本实现, 如无zsh推荐使用 `wget https://gitea.whlug.cn/xunmi/x/raw/start.sh && bash start.sh && rm start.sh` 命令安装基础模块 +```bash +# 无zsh或向使用言灵的zsh配置代替原zsh配置 +wget -q --show-progress https://gitea.whlug.cn/xunmi/x/raw/start.sh && bash start.sh +# 已有zsh且不想使用言灵的zsh代替原有配置 +wget -q --show-progress https://gitea.whlug.cn/xunmi/x/raw/安装.zsh && zsh 安装.zsh +``` -# 功能实现 +## 功能实现 * [x] 使用zsh替代老旧的bash -* [ ] 使用现代化工具集代替老旧工具 +* [x] 使用现代化工具集代替老旧工具 * [ ] 根据不同的系统添加汉化别名(主要是包管理器那块需要区别) * [ ] 实现开发者常用工具的自动安装(如Golang、Rust、Python、Java、Nodejs等编程语言的安装和JetBrains系列软件的安装维护) * [ ] 实现命令行回收站功能(将rm命令重命名为mv, 并将其自动移动到某个指定目录) 备注: 计划使用go写一个回收站程序, 将rm的参数实现无缝衔接, 并且可以自动检测回收站内的文件超过预设时间后自动删除 -# 参与开发与反馈 +## 参与开发与反馈 -* 反馈说明: 欢迎存在志同道合的朋友一起协作开发, 项目受众为群体为母语或常用语言为中文的群体, 同样项目当前主要维护人员也已中文作为日常交流语言, 顾反馈工单或问题时麻烦尽可能使用中文编写 +* 反馈说明: 欢迎存在志同道合的朋友一起协作开发, 项目受众为群体为母语或常用语言为中文的群体 + 同样项目当前主要维护人员也已中文作为日常交流语言 + 顾反馈工单或问题时麻烦尽可能使用中文编写 * 反馈模版 > * 主机: `6.6.10-zen1-1-zen #1 ZEN SMP PREEMPT_DYNAMIC Fri, 05 Jan 2024 16:20:18 +0000 x86_64` > * 时间: `2024年2月3日22:30:03` @@ -24,11 +32,13 @@ > * 截图: 报错前后的内容都需要截图不要只截错误, 分析错误需要联系上下文! > > 备注: 主机信息可以使用 `uname -mvr`命令查看, 时间为发生问题的时间(大概就可以) - -* 开发说明: 本项目允许使用使用中文变量名 (受限于sh\bash本身不支持使用中文, 不要在bash中使用中文), 使用中文的目的为增加本项目开发人员的代码可读性, 非强制要求 + +* 开发说明: 本项目允许使用使用中文变量名 (受限于sh\bash本身不支持使用中文, 不要在bash中使用中文) + 使用中文的目的为增加本项目开发人员的代码可读性, 非强制要求 > * 多词组合命名规范 - > * 中文变量名推荐格式: `动词_名称`, 比如`打开_文件`、`检测_内存` - > * 主要是将常用词语放在前面方便分类, 如果名词+名称组合, 可以参考如下实例: `系统_类型` `系统_版本` `系统_发行版` `系统_发行版_名称`, 根据名词使用频率排序 + > * 多词请用中文文字中的数字1`一`连接, 使用传统下划线或者减号连接会导致vim跳转出现异常 + > * 中文变量名推荐格式: `动词一名称`, 比如`打开一文件`、`检测一内存` + > * 主要是将常用词语放在前面方便分类, 如果名词+名称组合, 可以参考如下实例: `系统一类型` `系统一版本` `系统一发行版` `系统一发行版一名称`, 根据名词使用频率排序 > * 英文变量名使用小驼峰命名 > * git提交时务必编写明确的提交说明,提交时请携带类型, 类型主要分类如下: > * `[新增]`: 添加新功能, 新接口 @@ -36,7 +46,7 @@ > * `[文档]`: 跟新文本类信息, 为修改项目代码(包含项目内的注释, print输出等) > * `[混合]`: 同时包含上述多种分类的更新提交, 此类提交需要具体描写扩展描述 -# 备注 +## 备注 `言灵` 是我在中学时期很喜欢的小说 《龙族》 中人龙混血后代所具有的特殊能力的一种统称, 同时又满足了本项目想在命令行中让我们自己的母语也能管用的功能 diff --git a/公共/函数.zsh b/公共/函数.zsh index 7e32dbb..ae16414 100644 --- a/公共/函数.zsh +++ b/公共/函数.zsh @@ -8,7 +8,7 @@ # 启动言灵公共函数模块的标识符 -言灵_函数=1 +言灵一函数=1 ############################################################################### # 终端配色 # @@ -46,12 +46,12 @@ readonly 色彩=( } # 灰色信息(处理一些无关紧要的信息, 调用后在没有清除颜色之前会一直使用灰色输出) -色彩_灰色() { +色彩一灰色() { echo -e "${色彩[2]}\c" } # 清除颜色(一般和灰色信息连用) -色彩_清除() { +色彩一清除() { echo -e "${色彩重置}\c" } diff --git a/公共/包管.zsh b/公共/包管.zsh index 96ceb5a..f2bd3e5 100644 --- a/公共/包管.zsh +++ b/公共/包管.zsh @@ -9,13 +9,13 @@ # 使用方法: 在言灵根目录下使用`. 公共/包管.zsh` # 启动言灵包管理模块的标识符 -言灵_包管=1 +言灵一包管=1 # 调用当前包管理器检查和更新 # 参数 [ -n --no-update -不更 ] 携带此参数为仅检查更新 # 参数 [ -y -确认 ] 跳过包管理器更新时的二次确认 # 实例 `包管_更新 -n`; `包管_更新 -确认` -包管_更新() { +包管一更新() { if [ -x "$(command -v oma)" ]; then # sudo oma refresh sudo oma update -y @@ -29,7 +29,7 @@ } # 调用当前包管理器的安装模块 -包管_安装(){ +包管一安装(){ [ -x "$(command -v $1)" ] && return 0 if [ -x "$(command -v oma)" ]; then # 解决oma找不到软件包返回值还是0的问题, 先搜索一下软件包 @@ -49,6 +49,6 @@ # 默认会尝试使用 apt-file pkgfile 等第三方搜索工具, 未找到第三方搜索工具时尝试使用包管理器自带搜索模块 # 参数 [ -n --no-file -原版 ] -包管_搜索() { +包管一搜索() { } diff --git a/安装.zsh b/安装.zsh index fb3d80e..b736309 100755 --- a/安装.zsh +++ b/安装.zsh @@ -13,18 +13,18 @@ source /etc/os-release # 全局变量 # ############################################################################### -typeset -a 通用_包列表=('wget' 'curl' 'git' 'vim' 'sudo') -typeset -a 架构_包列表=() -typeset -a 系统_包列表=() -readonly CPU_架构="$(uname -m)" -readonly 系统_类型="$(uname -s)" -readonly 系统_版本="$(uname -r)" +typeset -a 通用一包列表=('wget' 'curl' 'git' 'vim' 'ctag' 'sudo') +typeset -a 架构一包列表=() +typeset -a 系统一包列表=() +readonly CPU一架构="$(uname -m)" +readonly 系统一类型="$(uname -s)" +readonly 系统一版本="$(uname -r)" # ID_LIKE不为空,则输出ID_LIKE的值,否则输出ID的值 -readonly 系统_发行版=$( ([ -n "${ID_LIKE}" ] && echo "${ID_LIKE}") || ([ -n "${ID}" ] && echo "${ID}")) -readonly 系统_发行版_名称=$(echo "${NAME}") -系统_发行版_标识="" +readonly 系统一发行版=$( ([ -n "${ID_LIKE}" ] && echo "${ID_LIKE}") || ([ -n "${ID}" ] && echo "${ID}")) +readonly 系统一发行版一名称=$(echo "${NAME}") +系统一发行版一标识="" # 龙架构区分新旧世界的标志位 -世界_类型="旧世界" +世界一类型="旧世界" ############################################################################### # 函数/方法 # @@ -36,47 +36,47 @@ readonly 系统_发行版_名称=$(echo "${NAME}") 输出 2 "计划安装列表: ${包列表}" for 包 in "${包列表[@]}";do 输出 2 "正在安装 -> ${包} <-" - 色彩_灰色 - 包管_安装 ${包} - 色彩_清除 + 色彩一灰色 + 包管一安装 ${包} + 色彩一清除 done } -检查_架构() { - case ${CPU_架构} in +检查一架构() { + case ${CPU一架构} in *x86_64*) - 主机_架构="amd64" + 主机一架构="amd64" ;; *loong*) - 主机_架构="龙" + 主机一架构="龙" # 6之前除了5.19以外的所有内核都是旧世界 #if [[ ${系统_版本} =~ ^[3,4,5].+ && !${系统_版本} =~ ^5.19.0-.+ ]]; then # 世界_类型="旧世界" #fi # 使用更高级的方法判断新旧世界 # 龙架构二进制 第四行是43开头是新世界, 03开头是旧世界 - 世界_类型_标志位=$(hexdump -s 48 -C /usr/bin/sh | head -n 1 | awk '{print $2}') - if [[ ${世界_类型_标志位} == "43" ]];then - 世界_类型="新世界" + 世界一类型一标志位=$(hexdump -s 48 -C /usr/bin/sh | head -n 1 | awk '{print $2}') + if [[ ${世界一类型一标志位} == "43" ]];then + 世界一类型="新世界" fi ;; *) - 输出 1 "暂不支持${色彩[3]} ${CPU_架构} ${色彩重置}架构" + 输出 1 "暂不支持${色彩[3]} ${CPU一架构} ${色彩重置}架构" exit 1 ;; esac - 输出 2 "检测到${色彩[1]} ${主机_架构} ${色彩重置}架构" + 输出 2 "检测到${色彩[1]} ${主机一架构} ${色彩重置}架构" } -检查_发行版() { +检查一发行版() { 未知=0 - case ${系统_发行版} in + case ${系统一发行版} in *arch*) ;; *Loongnix*) ;; *aosc*) - 系统_发行版_标识符="安同" + 系统一发行版一标识符="安同" # 前三个是字体包 - 系统_包列表=('jetbrains-mono' 'powerline-fonts' 'fantasque-sans-mono-nerd-fonts') + 系统一包列表=('jetbrains-mono' 'powerline-fonts' 'fantasque-sans-mono-nerd-fonts') ;; *openwrt*) 输出 1 "暂不支持openwrt" @@ -87,7 +87,7 @@ readonly 系统_发行版_名称=$(echo "${NAME}") ;; esac - 输出 2 "检测到 ${系统_发行版_名称} (${系统_发行版}) 系统" + 输出 2 "检测到 ${系统一发行版一名称} (${系统一发行版}) 系统" if [[ ${未知} == 1 ]]; then if 是否 "此发行版尚未验证, 是否尝试继续安装"; then 输出 3 "在尚未验证的系统中安装可能会出现未知问题, 如果部分字体出现 口口口 或者乱码的问题, 请手动安装nerd-fonts字体家族的字体" @@ -100,47 +100,60 @@ readonly 系统_发行版_名称=$(echo "${NAME}") 配置检测(){ 输出 2 "主机信息检测模块启动" - 检查_架构 - 检查_发行版 + 检查一架构 + 检查一发行版 # 将本机信息更新到指定文件 - mkdir -vp ${目录_配置} - rm -v ${目录_配置}/信息.zsh - echo "系统_发行版标识=${系统_发行版_标识符}" >> ${目录_配置}/信息.zsh - echo "系统_世界类型=${世界_类型}" >> ${目录_配置}/信息.zsh - echo "系统_主机架构=${主机_架构}" >> ${目录_配置}/信息.zsh + mkdir -vp ${目录一配置} + rm -v ${目录一配置}/信息.zsh + echo "系统一发行版标识=${系统一发行版一标识符}" >> ${目录一配置}/信息.zsh + echo "系统一世界类型=${世界一类型}" >> ${目录一配置}/信息.zsh + echo "系统一主机架构=${主机一架构}" >> ${目录一配置}/信息.zsh 输出 0 "主机信息检测完毕" } -优化_常用命令_vim(){ +优化一常用命令一vim(){ 输出 2 "启动vim优化, 安装代码检查和树状目录插件, 并优化配置(具体配置可以查看 $HOME/.vimrc 文件)" - vim_配置路径=$HOME/.vim/pack/xunmi - typeset -a vim_包列表=('vim-airline') - 批量安装 ${vim_包列表[@]} && 输出 0 "vim依赖包安装完毕" - 色彩_灰色 - rm -vrf ${vim_配置路径} - mkdir -vp ${vim_配置路径}/{opt,start} - # 树状目录 - git clone --depth 1 https://gitcode.com/mirrors/scrooloose/nerdtree.git ${vim_配置路径}/start/树状目录 - # 代码检查工具 - git clone --depth 1 https://gitcode.com/mirrors/dense-analysis/ale.git ${vim_配置路径}/start/代码检查工具 - cp -v ${目录_根}/配置/vimrc $HOME/.vimrc - 色彩_清除 + vim一配置路径=$HOME/.vim/pack/xunmi + 色彩一灰色 + rm -vrf ${vim一配置路径} + mkdir -vp ${vim一配置路径}/{opt,start} + git clone --depth 1 https://gitcode.com/mirrors/scrooloose/nerdtree.git ${vim一配置路径}/start/树状目录 + git clone --depth 1 https://gitcode.com/dense-analysis/ale.git ${vim一配置路径}/start/代码检查工具 + git clone --depth 1 https://gitcode.com/jiangmiao/auto-pairs.git ${vim一配置路径}/start/括号补齐 + git clone --depth 1 https://gitcode.com/Yggdroot/LeaderF.git ${vim一配置路径}/start/模糊搜索器 + git clone --depth 1 https://gitcode.com/mirrors/ludovicchabant/vim-gutentags.git ${vim一配置路径}/start/标签生成器 + if 是否 "是否需要安装vim代码补全工具(代码补全工具需要nodejs支持, 如找不到nodejs脚本将会自动安装)"; then + 输出 2 "默认会安装 shell c/c++ cmake go java json markdown perl python r rust 语言的补全" + 色彩一灰色 + git clone --depth 1 https://gitcode.com/neoclide/coc.nvim.git ${vim一配置路径}/start/代码补全 + # todo: 这里调用一个nodejs的检查工具 + # 编译和启动 + npm -C ${vim一配置路径}/start/代码补全 i && npm -C ${vim一配置路径}/start/代码补全 ci + vim -c ":CocInstall coc-sh coc-clangd coc-cmake coc-go coc-json coc-java coc-markdownlint coc-perl coc-pyright coc-r-lsp coc-rls" ${目录一根}/配置/vim配置说明.vim + 是否 "是否安装前端相关代码补全工具(html css js/ts vue)" && vim -c ":CocInstall coc-css coc-html coc-tsserver coc-vetur" ${目录一根}/配置/vim配置说明.vim + fi + git clone --depth 1 https://gitcode.com/mirrors/preservim/nerdcommenter.git ${vim一配置路径}/start/注释工具 + git clone --depth 1 https://gitcode.com/vim-airline/vim-airline.git ${vim一配置路径}/start/VIM状态栏 + git clone --depth 1 https://gitcode.com/mirrors/vim-airline/vim-airline-themes.git ${vim一配置路径}/start/VIM状态栏_皮肤 + + cp -v ${目录一根}/配置/vimrc $HOME/.vimrc + 色彩一清除 } -优化_常用命令_ls(){ +优化一常用命令一ls(){ 输出 2 "启动ls优化" - 色彩_灰色 - if ! 包管_安装 "lsd"; then + 色彩一灰色 + if ! 包管一安装 "lsd"; then 是否 "在系统源中未发现lsd, 是否使用cargo安装(需要rust语言, 如系统没有则会自动安装)" || return 201 # todo: 需要判断龙芯旧世界, 旧世界安装的cargo版本过低, 需要从官网下载安装 - if ! 包管_安装 "cargo"; then + if ! 包管一安装 "cargo"; then 输出 3 "ls优化失败, 未找到cargo, 请手动安装rust语言及其cargo包管理器后重试" return 202 fi cargo install "lsd" fi sudo ln -vs $HOME/.cargo/bin/lsd /usr/bin/lsd - 色彩_清除 + 色彩一清除 if 是否 "将lsd使用别名的方式替代ls"; then 别名='alias ls="lsd"' grep -q "${别名}" "$HOME/.zshrc" || echo ${别名} >> $HOME/.zshrc @@ -148,20 +161,21 @@ readonly 系统_发行版_名称=$(echo "${NAME}") 输出 0 "ls优化完成" } -优化_常用命令_top(){ - if [[ ${主机_架构}=="龙" ]]; then +优化一常用命令一top(){ + if [[ ${主机一架构}=="龙" ]]; then xmtop版本="v4.2.1" - 输出 2 "开始下载 xmtop-${xmtop版本}-${世界_类型}" - xmtop_url="https://gitea.whlug.cn/xunmi/xmtop/releases/download/${xmtop版本}/xmtop_${世界_类型}" + 输出 2 "开始下载 xmtop-${xmtop版本}-${世界一类型}" + xmtop_url="https://gitea.whlug.cn/xunmi/xmtop/releases/download/${xmtop版本}/xmtop_${世界一类型}" sudo wget -t 3 -q --show-progress -c ${xmtop_url} || 输出 5 "无法下载程序包" || return 301 - sudo mv -v xmtop_${世界_类型} /usr/bin/xmtop + sudo mv -v xmtop_${世界一类型} /usr/bin/xmtop + sudo chmod 755 /usr/bin/xmtop else - 输出 2 "${主机_架构} 架构, 暂未适配top优化, 推荐手动安装gotop, btop等代替top" + 输出 2 "${主机一架构} 架构, 暂未适配top优化, 推荐手动安装gotop, btop等代替top" fi - 输出 0 "xmtop配置完毕, 输入xmtop查看效果" + 输出 0 "xmtop配置完毕,输入xmtop查看效果" } -优化_常用命令(){ +优化一常用命令(){ typeset -A 列表=( ["vim"]="添加常用配置项(允许复制 添加行号 显式当前行等), 常用插件(目录 语法检测)" ["ls"]="使用lsd替代老旧的ls, (lsd是rust编写的兼容ls的目录查看工具, 其丰富的配色和图标可有效增加目录的可读性)" @@ -173,7 +187,7 @@ readonly 系统_发行版_名称=$(echo "${NAME}") # 遍历关联数组 for 键 值 in ${(kv)列表}; do if 是否 "是否启动 '${键}' 命令优化 -> ${值} <- "; then - 优化_常用命令_${键} + 优化一常用命令一${键} else 输出 3 "已取消 ${键} 的优化" fi @@ -190,6 +204,7 @@ readonly 系统_发行版_名称=$(echo "${NAME}") } + ############################################################################### # 主函数(main) # ############################################################################### @@ -199,26 +214,26 @@ echo " * 欢迎使用 言灵 配置脚本 * *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* " -目录_根=$PWD -目录_配置=$HOME/.config/xunmi +目录一根=$PWD +目录一配置=$HOME/.config/xunmi # 判断当前执行的位置 如果不再项目路径中就去寻找路径 if [ ! -f "公共/函数.zsh" ]; then - source ${目录_配置}/* - 目录_根=${寻觅}/x + source ${目录一配置}/* + 目录一根=${寻觅}/x fi -echo "执行目录: ${目录_根}" +echo "执行目录: ${目录一根}" # 先检查公共函数是否正常加载 -[[ ${言灵_函数} == 1 ]] || . ${目录_根}/公共/函数.zsh || exit 2 && 输出 0 "公共函数模块初始化完成" -[[ ${言灵_包管} == 1 ]] || . ${目录_根}/公共/包管.zsh || exit 3 && 输出 0 "包管理器模块初始化完成" +[[ ${言灵一函数} == 1 ]] || . ${目录一根}/公共/函数.zsh || exit 2 && 输出 0 "公共函数模块初始化完成" +[[ ${言灵一包管} == 1 ]] || . ${目录一根}/公共/包管.zsh || exit 3 && 输出 0 "包管理器模块初始化完成" 配置检测 -[[ ${#通用_包列表} -ne 0 ]] && 批量安装 ${通用_包列表[@]} && 输出 0 "通用包安装完毕" -[[ ${#架构_包列表} -ne 0 ]] && 批量安装 ${架构_包列表[@]} && 输出 0 "架构专用包安装完毕" -[[ ${#系统_包列表} -ne 0 ]] && 批量安装 ${系统_包列表[@]} && 输出 0 "系统发行版专用包安装完毕" +[[ ${#通用一包列表} -ne 0 ]] && 批量安装 ${通用一包列表[@]} && 输出 0 "通用包安装完毕" +[[ ${#架构一包列表} -ne 0 ]] && 批量安装 ${架构一包列表[@]} && 输出 0 "架构专用包安装完毕" +[[ ${#系统一包列表} -ne 0 ]] && 批量安装 ${系统一包列表[@]} && 输出 0 "系统发行版专用包安装完毕" -优化_常用命令 -# 配置_开发环境 +优化一常用命令 +# 配置一开发环境 选配 diff --git a/测试.zsh b/测试.zsh deleted file mode 100755 index af4d9f4..0000000 --- a/测试.zsh +++ /dev/null @@ -1,218 +0,0 @@ -#!/usr/bin/zsh - -export PATH=/usr/sbin:$PATH -# 让apt包管理器处于非交互模式运行 -export DEBIAN_FRONTEND=noninteractive -# 加载系统配置 -source /etc/os-release - -# 脚本在执行过程中遇到任何非零返回码的命令时立即退出 -# set -e - -############################################################################### -# 全局变量 # -############################################################################### - -typeset -a 通用_包列表=('wget' 'curl' 'git' 'vim' 'sudo') -typeset -a 架构_包列表=() -typeset -a 系统_包列表=() -readonly CPU_架构="$(uname -m)" -readonly 系统_类型="$(uname -s)" -readonly 系统_版本="$(uname -r)" -# ID_LIKE不为空,则输出ID_LIKE的值,否则输出ID的值 -readonly 系统_发行版=$( ([ -n "${ID_LIKE}" ] && echo "${ID_LIKE}") || ([ -n "${ID}" ] && echo "${ID}")) -readonly 系统_发行版_名称=$(echo "${NAME}") -系统_发行版_标识="" -# 龙架构区分新旧世界的标志位 -世界_类型="新世界" - -############################################################################### -# 函数/方法 # -############################################################################### - -# 调用包管理器批量安装 -批量安装(){ - typeset -a 包列表=($@) - 输出 2 "计划安装列表: ${包列表}" - for 包 in "${包列表[@]}";do - 输出 2 "正在安装 -> ${包} <-" - 色彩_灰色 - 包管_安装 ${包} - 色彩_清除 - done -} - -检查_架构() { - case ${CPU_架构} in - *x86_64*) - 主机_架构="amd64" - ;; - *loong*) - 主机_架构="龙" - # 6之前除了5.19以外的所有内核都是旧世界 - if [[ ${系统_版本} =~ ^[3,4,5].+ && !${系统_版本} =~ ^5.19.0-.+ ]]; then - 世界_类型="旧世界" - fi - ;; - *) - 输出 1 "暂不支持${色彩[3]} ${CPU_架构} ${色彩重置}架构" - exit 1 - ;; - esac - 输出 2 "检测到${色彩[1]} ${主机_架构} ${色彩重置}架构" -} - -检查_发行版() { - 未知=0 - case ${系统_发行版} in - *arch*) ;; - *Loongnix*) ;; - *aosc*) - 系统_发行版_标识符="安同" - # 前三个是字体包 - 系统_包列表=('jetbrains-mono' 'powerline-fonts' 'fantasque-sans-mono-nerd-fonts') - ;; - *openwrt*) - 输出 1 "暂不支持openwrt" - exit 1 - ;; - *) - 未知=1 - ;; - esac - - 输出 2 "检测到 ${系统_发行版_名称} (${系统_发行版}) 系统" - if [[ ${未知} == 1 ]]; then - if 是否 "此发行版尚未验证, 是否尝试继续安装"; then - 输出 3 "在尚未验证的系统中安装可能会出现未知问题, 如果部分字体出现 口口口 或者乱码的问题, 请手动安装nerd-fonts字体家族的字体" - else - 输出 1 "已退出安装" - exit 1 - fi - fi -} - -配置检测(){ - 输出 2 "主机信息检测模块启动" - 检查_架构 - 检查_发行版 - # 将本机信息更新到指定文件 - mkdir -vp ${目录_配置} - rm -v ${目录_配置}/信息.zsh - echo "系统_发行版标识=${系统_发行版_标识}" >> ${目录_配置}/信息.zsh - echo "系统_世界类型=${世界_类型}" >> ${目录_配置}/信息.zsh - echo "系统_主机架构=${主机_架构}" >> ${目录_配置}/信息.zsh - 输出 0 "主机信息检测完毕" -} - -优化_常用命令_vim(){ - 输出 2 "启动vim优化, 安装代码检查和树状目录插件, 并优化配置(具体配置可以查看 $HOME/.vimrc 文件)" - vim_配置路径=$HOME/.vim/pack/xunmi - typeset -a vim_包列表=('vim-airline') - 批量安装 ${vim_包列表[@]} && 输出 0 "vim依赖包安装完毕" - 色彩_灰色 - rm -vrf ${vim_配置路径} - mkdir -vp ${vim_配置路径}/{opt,start} - # 树状目录 - git clone --depth 1 https://gitcode.com/mirrors/scrooloose/nerdtree.git ${vim_配置路径}/start/树状目录 - # 代码检查工具 - git clone --depth 1 https://gitcode.com/mirrors/dense-analysis/ale.git ${vim_配置路径}/start/代码检查工具 - cp -v ${目录_根}/配置/vimrc $HOME/.vimrc - 色彩_清除 -} - -优化_常用命令_ls(){ - 输出 2 "启动ls优化, lsd是rust编写的兼容ls的目录查看工具, 其丰富的配色和图标可有效增加目录的可读性" - 色彩_灰色 - if ! 包管_安装 "lsd"; then - 是否 "在系统源中未发现lsd, 是否使用cargo安装(需要rust语言, 如系统没有则会自动安装)" || return 201 - # todo: 需要判断龙芯旧世界, 旧世界安装的cargo版本过低, 需要从官网下载安装 - if ! 包管_安装 "cargo"; then - 输出 3 "ls优化失败, 未找到cargo, 请手动安装rust语言及其cargo包管理器后重试" - return 202 - fi - cargo install "lsd" - fi - sudo ln -vs $HOME/.cargo/bin/lsd /usr/bin/lsd - 色彩_清除 - if 是否 "将lsd使用别名的方式替代ls"; then - 别名='alias ls="lsd"' - grep -q "${别名}" "$HOME/.zshrc" || echo ${别名} >> $HOME/.zshrc - fi - 输出 0 "ls优化完成" -} - -优化_常用命令_top(){ - if [[ ${主机_架构}=="龙" ]]; then - xmtop版本="v4.2.1" - 输出 2 "开始下载 xmtop-${xmtop版本}-${世界_类型}" - xmtop_url="https://gitea.whlug.cn/xunmi/xmtop/releases/download/${xmtop版本}/xmtop_${世界_类型}" - sudo wget -t 3 -q --show-progress -c ${xmtop_url} || 输出 5 "无法下载程序包" || return 301 - sudo mv -v xmtop_${世界_类型} /usr/bin/xmtop - else - 输出 2 "${主机_架构} 架构, 暂未适配top优化, 推荐手动安装gotop, btop等代替top" - fi - 输出 0 "xmtop配置完毕, 输入xmtop查看效果" -} - -优化_常用命令(){ - typeset -A 列表=( - ["vim"]="添加常用配置项(允许复制 添加行号 显式当前行等), 常用插件(目录 语法检测)" - ["ls"]="使用lsd替代老旧的ls, 需要rust的cargo" - ["top"]="使用xmtop替代老旧的top系统信息监控功能" - ["cat"]="使用bat替代cat" - ["sed"]="使用学习成本较低的sd替代sed" - ) - 输出 2 "正在优化 ${(k)列表} 命令" - # 遍历关联数组 - for 键 值 in ${(kv)列表}; do - if 是否 "是否启动 '${键}' 命令优化 -> ${值} <- "; then - 优化_常用命令_${键} - else - 输出 3 "已取消 ${键} 的优化" - fi - done -} - -选配(){ - if 是否 "将Zsh设置为默认命令行"; then - chsh -s /usr/bin/zsh - 输出 0 "已将zsh设置为默认命令行,此设置主要适用于ssh和tty,如终端不生效则需要在可视化设置中手动配置启动时加载 '/usr/bin/zsh' " - else - 输出 2 "如需将zsh设置为默认命令行请执行: 'chsh -s /usr/bin/zsh' " - fi -} - - -############################################################################### -# 主函数(main) # -############################################################################### - -echo " -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -* 欢迎使用 言灵 配置脚本 * -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* -" -目录_根=$PWD -目录_配置=$HOME/.config/xunmi -# 判断当前执行的位置 如果不再项目路径中就去寻找路径 -if [ ! -f "公共/函数.zsh" ]; then - source ${目录_配置}/* - 目录_根=${寻觅}/x -fi -echo "执行目录: ${目录_根}" - -# 先检查公共函数是否正常加载 -[[ ${言灵_函数} == 1 ]] || . ${目录_根}/公共/函数.zsh || exit 2 && 输出 0 "公共函数模块初始化完成" -[[ ${言灵_包管} == 1 ]] || . ${目录_根}/公共/包管.zsh || exit 3 && 输出 0 "包管理器模块初始化完成" - -配置检测 - -[[ ${#通用_包列表} -ne 0 ]] && 批量安装 ${通用_包列表[@]} && 输出 0 "通用包安装完毕" -[[ ${#架构_包列表} -ne 0 ]] && 批量安装 ${架构_包列表[@]} && 输出 0 "架构专用包安装完毕" -[[ ${#系统_包列表} -ne 0 ]] && 批量安装 ${系统_包列表[@]} && 输出 0 "系统发行版专用包安装完毕" - -优化_常用命令_top -# 配置_开发环境 - -# 选配 diff --git a/配置/vimrc b/配置/vimrc index c52ca72..657658c 100644 --- a/配置/vimrc +++ b/配置/vimrc @@ -1,31 +1,46 @@ -set nocompatible " 去除 vi 一致性 -set number " 打开行数查看 -set cursorline " 光标所在的当前行高亮。 -set linebreak " 只有遇到指定的符号(比如空格、连词号和其他标点符号),才发生折行。 +set nocompatible " 去除 vi 一致性 +set number " 打开行数查看 +set cursorline " 光标所在的当前行高亮。 +set linebreak " 只有遇到指定的符号(比如空格、连词号和其他标点符号),才发生折行。 -set laststatus=2 " 是否显示状态栏。0 表示不显示,1 表示只在多窗口时显示,2 表示显示。 -set ruler " 在状态栏显示光标的当前位置(位于哪一行哪一列)。 -set undofile " 保留撤销历史。 -set undodir=~/.vim/.undo " 设置操作历史文件的保存位置。 -set encoding=utf-8 " 使用 utf-8 编码 -set autoindent " 按下回车键后,下一行的缩进会自动跟上一行的缩进保持一致。 -set smartindent " 智能缩进 -set tabstop=4 " 按下 Tab 键时,Vim 显示的空格数。 -filetype indent on " 开启文件类型检查,并且载入与该类型对应的缩进规则。 -filetype on " 开启文件类型检测 -filetype plugin indent on " 开启文件类型插件检测 -syntax on " 开启语法高亮 +set laststatus=2 " 是否显示状态栏。0 表示不显示,1 表示只在多窗口时显示,2 表示显示。 +set ruler " 在状态栏显示光标的当前位置(位于哪一行哪一列)。 +set undofile " 保留撤销历史。 +set undodir=~/.vim/.undo " 设置操作历史文件的保存位置。 +set encoding=utf-8 " 使用 utf-8 编码 +set autoindent " 按下回车键后,下一行的缩进会自动跟上一行的缩进保持一致。 +set smartindent " 智能缩进 +set tabstop=4 " 按下 Tab 键时,Vim 显示的空格数。 +filetype indent on " 开启文件类型检查,并且载入与该类型对应的缩进规则。 +filetype on " 开启文件类型检测 +filetype plugin indent on " 开启文件类型插件检测 +syntax on " 开启语法高亮 -set showmode " 在底部显示,当前处于命令模式还是插入模式。 -set showcmd " 命令模式下,在底部显示,当前键入的指令。比如,键入的指令是 2y3d,那么底部就会显示 2y3,当键入 d 的时候,操作完成,显示消失。 -set mouse= " 支持使用鼠标(但这样会导致无法复制!) +set showmode " 在底部显示,当前处于命令模式还是插入模式。 +set showcmd " 命令模式下,在底部显示,当前键入的指令。比如,键入的指令是 2y3d,那么底部就会显示 2y3,当键入 d 的时候,操作完成,显示消失。 +set mouse= " 支持使用鼠标(但这样会导致无法复制!) let g:airline#extensions#tabline#enabled = 1 " 设置开启 tab 样式 let g:airline#extensions#tabline#formatter = 'jsformatter' " 设置默认 tab 栏样式 let g:airline_theme='angr' " 选择配色 -" 使用目录启动时自动启动侧栏 +let g:NERDSpaceDelims = 1 " 默认情况下,在注释分隔符后添加空格 +let g:NERDCompactSexyComs = 1 " 使用紧凑的语法来美化多行注释 +let g:NERDTrimTrailingWhitespace = 1 " 启用在取消注释时修剪尾部空白的功能 +let g:NERDToggleCheckAllLines = 1 " 启用 NERDCommenterToggle 以检查所有选定行是否已注释 + +" 树状目录: 使用目录启动时自动启动侧栏 autocmd StdinReadPre * let s:std_in=1 autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in') | \ execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif +" 标签生成器(ludovicchabant/vim-gutentags): 在特定目录下自动调用ctags生成标签 +set statusline+=%{gutentags#statusline()} " 在状态行中打印字符串“tag”,当Gutengs在后台生成内容时 +let g:gutentags_project_root = ['.git', '.svn', 'Makefile'] " 工程根目录标识(打开包含如下文件或目录是激活Gutentag)。 +let g:gutentags_ctags_tagfile = '.tags' " 生成数据文件名称。 +let g:gutentags_cache_dir = expand('~/.config/xunmi/tag') " 指定缓存根目录,ctags保存在该目录下。 +"Ctags配置参数。 +let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q'] +let g:gutentags_ctags_extra_args += ['--c++-kinds=+pxI'] +let g:gutentags_ctags_extra_args += ['--c-kinds=+px'] + diff --git a/配置/vim配置说明.vim b/配置/vim配置说明.vim new file mode 100644 index 0000000..c11576a --- /dev/null +++ b/配置/vim配置说明.vim @@ -0,0 +1,7 @@ +受限于vim特性, 没法做到执行完命令后自动退出, 如果左侧命令执行完毕, 请手动退出(:qa或:x) + +完全不会使用vim请按如下操作: +等左侧执行完毕(所有下载和安装结束, 左侧内容超过五秒没发生任何变化) +1. 双击两下esc +2. 输入`:qa`( 按一下冒号,然后按字母q和a ), 这时候整个vim会退出 +