From c7033b6da93cbd6f108896fb72e809229d23bc67 Mon Sep 17 00:00:00 2001 From: xunmi-pc <寻觅> Date: Mon, 18 Mar 2024 16:51:45 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E]=20=E6=96=B0=E5=A2=9E'?= =?UTF-8?q?=E5=85=AC=E5=85=B1>=E5=BC=80=E5=8F=91=E7=8E=AF=E5=A2=83.zsh'?= =?UTF-8?q?=E4=B8=ADGo=E8=AF=AD=E8=A8=80=E7=9A=84=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E5=8A=9F=E8=83=BD,=20=E6=96=B0=E5=A2=9E'?= =?UTF-8?q?=E5=85=AC=E5=85=B1>=E5=87=BD=E6=95=B0.zsh'=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E8=8E=B7=E8=A7=A3=E5=87=BD=E6=95=B0,=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=A7=A3=E5=8E=8B=E5=87=BD=E6=95=B0,=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=BE=93=E5=87=BA=E5=87=BD=E6=95=B0,=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=B8=A4=E4=B8=AAvim=E6=8F=92=E4=BB=B6,=20git=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=92=8C=E6=A0=87=E7=AD=BE=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 公共/函数.zsh | 77 +++++++++++++++++++++-------------------- 公共/开发环境.zsh | 62 +++++++++++++++++++++++---------- 安装.zsh | 10 +++--- 文档/言灵vim使用说明.md | 52 +++++++++++++++------------- 配置/vimrc | 4 +++ 5 files changed, 120 insertions(+), 85 deletions(-) diff --git a/公共/函数.zsh b/公共/函数.zsh index bedf545..7d8d109 100644 --- a/公共/函数.zsh +++ b/公共/函数.zsh @@ -26,10 +26,11 @@ readonly 色彩=( ) # 用于规范输出的工具 -# 位置参数 1 -> 整数 <- 1: 成功(亮绿); 2: 失败(暗红); 3: 信息(绿色); 4: 通知(黄色); 5: 异常(紫色) -# 位置参数 2 -> 字符 <- 在命令行输出的字符串 -# 实例 `输出 0 "执行成功"`; `输出 3 "请及时更新依赖"` +# 例: `输出 0 "执行成功"`; `输出 3 "请及时更新依赖"` +# *-* 一 -> 整数 <- 1: 成功(亮绿); 2: 失败(暗红); 3: 信息(绿色); 4: 通知(黄色); 5: 异常(紫色) +# *-* 二 -> 字符 <- 在命令行输出的字符串 输出() { + echo -n "($(date +"%Y-%m-%d %H:%M:%S"))" if (($1 == 0)); then echo -e "${色彩[2]}[${色彩重置}${色彩[1]} 成功 ${色彩重置}${色彩[2]}]${色彩重置} $2" elif (($1 == 1)); then @@ -60,7 +61,7 @@ readonly 色彩=( ############################################################################### # 更具用户输入判断是否需要继续 -# *-* 位置参数 1 -> 字符 <- 用于提示用户选择时候的提示语 +# *-* 一 -> 字符 <- 用于提示用户选择时候的提示语 # -*- 返回值: 如果 输入`是/Y/y/yes` 返会0, 其他情况返会1 是否() { 输出 3 "$1((是/否 Yes/No))" @@ -72,56 +73,58 @@ readonly 色彩=( } # 用于判断两个版本号之间的大小 -# 格式实例:1.0.0, v8.8, go1.20.8 -# *-* 位置参数 1 -> 版本1 <- 第一个版本号 -# *-* 位置参数 2 -> 版本2 <- 第二个版本号 -# -*- 如果 版本1 >= 版本2 则返会0, 否者返会1 -# 使用实例: 版本对比 "$1" "$2" && echo "1: $1" || echo "2: $2" +# 备注: 版本格式实例 1.0.0, v8.8, go1.20.8 +# 例: `版本对比 "$1" "$2" && echo "1: $1" || echo "2: $2"` +# *-* 一 -> 字符(版本1) <- 建议为本地版本 +# *-* 二 -> 字符(版本2) <- 建议为需要对比的版本 +# -*- 返回值: 如果 版本1 >= 版本2 则返会1, 否者返会0, 根据建议填写参数效果则是本地如果是最新版则不会进入if判断 版本对比() { + # 判断版本是否为空 + if [ -z "${1// }" ]; then + return 0 + elif [ -z "${2// }" ]; then + return 1 + fi # 使用IFS分割版本号为数组 IFS='.' read -r -A 版本数组A <<< ${1//[^0-9.]/} IFS='.' read -r -A 版本数组B <<< ${2//[^0-9.]/} - # 逐段比较各个部分的大小 for ((i=1; i <= ${#版本数组A[@]}; i++)); do if (( ${版本数组A[i]} > ${版本数组B[i]} )); then - return 0 - elif (( ${版本数组A[i]} < ${版本数组B[i]} )); then return 1 + elif (( ${版本数组A[i]} < ${版本数组B[i]} )); then + return 0 fi done - # 如果循环结束仍未返回,则认为两个版本号相等 - return 0 + return 1 } +# 自动根据文件后缀选择响应的解压工具进行就地解压 +# *-* 一 -> 字符(文件名) <- 压缩文件 解压(){ 文件名=$1 后缀="${文件名##*.}" - + if [[ ${文件名} == *".tar."* ]]; then + 后缀="tar.${后缀}" + fi # 根据后缀选择解压命令 case ${后缀} in - "tar.gz" | "tgz") - tar -xzvf ${文件名} - ;; - "tar.xz") - tar -xJvf ${文件名} - ;; - "tar.bz2" | "tbz2") - tar -xjvf ${文件名} - ;; - "zip") - unzip ${文件名} - ;; - "rar") - unrar x ${文件名} - ;; - "7z") - 7z x ${文件名} - ;; - *) - echo "不支持的压缩格式" - return 1 - ;; + "tar.gz" | "tgz") tar -xzvf ${文件名} ;; + "tar.xz") tar -xJvf ${文件名} ;; + "tar.bz2" | "tbz2") tar -xjvf ${文件名} ;; + "zip") unzip ${文件名} ;; + "rar") unrar x ${文件名} ;; + "7z") 7z x ${文件名} ;; + *) 输出 5 "不支持的压缩格式" ;; esac } + +# 自动获取并且解压压缩包 +# *-* 一 -> 字符(网址) <- 在线获取压缩包的地址 +获解(){ + wget -t 3 --content-disposition -q --show-progress -c $1 || 输出 5 "无法下载程序包" + 包名="$(ls -t | head -n1)" + 输出 2 "已获取${包名}" + 解压 ${包名} +} \ No newline at end of file diff --git a/公共/开发环境.zsh b/公共/开发环境.zsh index 9c0ddee..5e0e7c9 100644 --- a/公共/开发环境.zsh +++ b/公共/开发环境.zsh @@ -1,9 +1,8 @@ #!/usr/bin/zsh ##################################### -# 用于快速配置旧世界的开发环境 # -# 支持的语言: # -# [ ] go # +# 自动配置常用开发环境 # +# [x] go # # [ ] rust # # [ ] java # # [ ] nodejs # @@ -16,6 +15,14 @@ # 变量 # ############################################################################# +# 加载基础环境 +source $HOME/.config/xunmi/信息 +# source $HOME/x/公共/函数.zsh +source ${言灵一路径}/x/公共/函数.zsh +路径一开发环境="${言灵一路径}/ide" +mkdir -p ${路径一开发环境} + +# 配置全局变量 local 旧世界一下载地址="http://ftp.loongnix.cn" typeset -A 语言一GO=( @@ -29,27 +36,37 @@ typeset -A 语言一GO=( # 函数(func) # ############################################################################# -# latest_version=$(curl -s https://golang.google.cn/dl/ | grep -o 'go1.*linux-.*\.tar\.gz' | head -n 1) - 开发环境一检测一GO(){ - 输出 0 "2: ${言灵一函数}" # 检测安装情况 unset 下载地址 + # 获取在线版本 版本一在线=$(curl -s ${语言一GO[下载地址]} | grep -o $(echo "${语言一GO[版本正则]}" | sed "s/架构/${言灵一系统架构}/g") | head -n 1) + 语言一GO[下载地址]="${语言一GO[下载地址]}${版本一在线}" if [[ ${系统一世界类型} == "旧世界" ]]; then - echo "旧世界?" + 输出 4 "[GO检测]旧世界支持开发兼容性较差,建议尽快迁移进入龙芯新世界!" 版本一在线=${语言一GO[旧世界版本]} - 下载地址="${旧世界一下载地址}/toolchain/golang/${版本一在线%.*}/abi1.0/${版本一在线}.linux-loong64.tar.gz" + 语言一GO[下载地址]="${旧世界一下载地址}/toolchain/golang/${版本一在线%.*}/abi1.0/${版本一在线}.linux-loong64.tar.gz" fi - 输出 0 "版本: ${版本一在线}" - if 版本对比 ${版本一主机} ${版本一在线}; then - 版本一主机=$(go version) | awk '{print $3}' + 输出 2 "[GO检测]在线版本: ${版本一在线%.linux*}" + # 对比本地版本 + if [ -x "$(command -v go)" ]; then + 版本一本地="$(echo $(go version) | awk '{print $3}')" + # 判断版本新旧 + 输出 2 "[GO检测]本地版本: ${版本一本地}" + if 版本对比 "${版本一本地}" "${版本一在线%.linux*}"; then + 输出 2 "[GO检测]发现新版本GO" + return 1 + fi + 输出 2 "[GO检测]已是最新的GO版本" + return 0 fi + 输出 2 "[GO检测]未检测到GO语言的本地版本" + return 1 } # 用于检测当前版本是否最新 +# 备注: 所有`开发环境一检测一*`返回0则代表无需更新,返回1则代表需要更新 # *-* -> 位置参数1 <- 需要检测的编程语言 -# -*- -> 返回值 <- 如果 本地版本 >= 在线版本 返会 空, 反之这会返回最新的在线版本下载地址 开发环境一检测(){ } @@ -64,11 +81,21 @@ typeset -A 语言一GO=( 系统一主机架构=${言灵一系统一主机架构} } -开发环境一安装一go(){ - # 换源 go env -w GOPROXY=https://goproxy.cn +开发环境一部署一GO(){ + 输出 2 "开始从 ${语言一GO[下载地址]} 下载部署最新版go语言" + + cd ${路径一开发环境} + 获解 ${语言一GO[下载地址]} + echo "# [觅库]GO语言环境变量-1" >> $HOME/.zshrc + echo "export PATH=${路径一开发环境}/go/bin:\$PATH" >> $HOME/.zshrc + echo "export GOPATH=$HOME/.goenv" >> $HOME/.zshrc + source $HOME/.zshrc + go env -w GOPROXY=https://goproxy.cn + 输出 0 "成功安装GO语言($(go version)), 并自动切换为国内GO语言下载源, 重启zsh生效!" + cd - } -开发环境一安装(){ +开发环境一部署(){ } @@ -76,10 +103,7 @@ typeset -A 语言一GO=( # 主函数(main) # ############################################################################### -source $HOME/.config/xunmi/信息 -source ${言灵一路径}/x/公共/函数.zsh 开发环境一初始化 开发环境一检测一GO - - +# 开发环境一部署一GO diff --git a/安装.zsh b/安装.zsh index d92eb61..4b1d03d 100755 --- a/安装.zsh +++ b/安装.zsh @@ -9,7 +9,7 @@ source /etc/os-release # 脚本在执行过程中遇到任何非零返回码的命令时立即退出 # set -e -readonly 言灵一版本="v1.0.0" +readonly 言灵一版本="v1.0.1" ############################################################################### # 全局变量 # @@ -45,7 +45,7 @@ readonly 系统一发行版一名称=$(echo "${NAME}") } # 从git镜像仓库获取依赖 -# *-* -> 位置参数 1 <- 拉去`作者/仓库名`, 比如: ohmyzsh/ohmyzsh +# *-* -> 位置参数 1 <- 拉去`作者/仓库名` # *-* -> 位置参数 2 <- 保存地址, 保存到本地的哪个路径 获取一git(){ git镜像="https://gitcode.com/mirrors" @@ -155,7 +155,7 @@ readonly 系统一发行版一名称=$(echo "${NAME}") fi cp -v ${目录一根}/配置/zshrc $HOME/.zshrc sed -i "s:export ZSH=/etc/oh-my-zsh:export ZSH=${配置一路径}:" $HOME/.zshrc - 是否 "是否需要将zsh预设配置赋予所有新用户" && sudo mv $HOME/.zshrc /etc/skel/.zshrc + 是否 "是否需要将zsh预设配置赋予所有新用户" && sudo cp $HOME/.zshrc /etc/skel/.zshrc if 是否 "将Zsh设置为默认命令行"; then chsh -s /usr/bin/zsh 输出 0 "已将zsh设置为默认命令行,此设置主要适用于ssh和tty如终端不生效则需要在可视化设置中手动配置启动时加载 '/usr/bin/zsh' " @@ -183,6 +183,8 @@ readonly 系统一发行版一名称=$(echo "${NAME}") 获取一git preservim/nerdcommenter ${vim一配置路径}/start/注释工具 获取一git vim-airline/vim-airline ${vim一配置路径}/start/VIM状态栏 获取一git vim-airline/vim-airline-themes ${vim一配置路径}/start/VIM状态栏_皮肤 + 获取一git airblade/vim-gitgutter ${vim一配置路径}/start/Git插件 + 获取一git preservim/tagbar ${vim一配置路径}/start/标签栏 获取一git Yggdroot/LeaderF ${vim一配置路径}/start/模糊搜索器 # if 是否 "是否启用基于c的模糊搜索(默认使用python, c的性能会好很多)"; then # vim -c ":LeaderfInstallCExtension" ${vim说明} @@ -228,7 +230,7 @@ readonly 系统一发行版一名称=$(echo "${NAME}") 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 wget -t 3 -q --show-progress -c ${xmtop_url} || 输出 5 "无法下载程序包" sudo mv -v xmtop_${世界一类型} /usr/bin/xmtop sudo chmod 755 /usr/bin/xmtop else diff --git a/文档/言灵vim使用说明.md b/文档/言灵vim使用说明.md index 0db4380..6b76f01 100644 --- a/文档/言灵vim使用说明.md +++ b/文档/言灵vim使用说明.md @@ -3,13 +3,11 @@ 言灵vim配置用法, 查看此教程前需对vim有一定了解, 如果您完全没有使用过vim, 请在命令行中执行 `vimtutor` 学习vim相关操作后再来查看此vim扩展 > 最少查看 `vimtutor` 的前三章 - ## 快捷键 vim常用快捷键记录 -> 备注: <占位符>(\): 是vim中自定义的键盘前缀, 默认使用反斜杠`\` -> 可以在`~/.vimrc`中自定义为其他键位`let mapleader = 'x'` +> 备注: <占位符>(\): 自定义键盘前缀, 默认为反斜杠`\` 在`~/.vimrc`可自定义 -> `let mapleader = 'x'` > 冒号 `:` 开头的快捷键是需要用户在预览模式下输入启动 * `[数量]<占位符>cc` 注释当前行和选中行 @@ -17,13 +15,16 @@ vim常用快捷键记录 * `[数量]<占位符>cA` 跳转到该行结尾添加注释,并进入编辑模式 * `[数量]<占位符>cu` 取消注释 -* `ctrl ]` 跳转到光标下的函数定义处 -* `*` 在本文件中查找函数或变量 -* `ctrl o` 返回跳转之前的位置 -* `ctrl i` 返回 `ctrl o` 跳转之前的位置 +* `ctrl ]` 跳转到光标下的函数定义处 +* `*` 在本文件中查找函数或变量 +* `ctrl o` 返回跳转之前的位置 +* `ctrl i` 返回 `ctrl o` 跳转之前的位置 +* `]c` 跳转到下一个修改的位置 +* `[c` 跳转到上一个修改的位置 -* `ctrl n` 打开目录 -* `<占位符>n` 将光标聚焦到目录 +* `ctrl g` 打开属性栏 +* `ctrl n` 打开目录栏 +* `<占位符>n` 将光标聚焦到目录 * `ctrl t` 切换目录状态(打开则关闭, 关闭则打开) * `ctrl f` 打开目录搜索框 * `ctrl w` 多个窗口之间切换焦点, 按下此快捷键后在按上下左右或者k(上)j(下)h(左)l(右) @@ -38,15 +39,15 @@ vim常用快捷键记录 * `<占位符>fm` 搜索最近使用的文件(相当于:Leaderf mru) * `<占位符>ft` 在缓冲区中导航标签, 相当于搜索当前文件定义的函数(相当于:Leaderf bufTag) * `<占位符>fl` 在缓冲区中搜索行, 相当于搜索当前文件(相当于:Leaderf line) - * `ctrl j` \[搜索窗口]向下移动搜索框 - * `ctrl k` \[搜索窗口]向上移动搜索框 - * `ctrl x` \[搜索窗口]在水平拆分窗口中打开 - * `ctrl ]` \[搜索窗口]在垂直拆分窗口中打开 - * `ctrl T` \[搜索窗口]在新选项卡页中打开 - * `ctrl ↓` \[搜索窗口]在弹出预览窗口中向下滚动 - * `ctrl ↑` \[搜索窗口]在弹出预览窗口中向上滚动 - * `ctrl R` \[搜索窗口]在模糊搜索模式和正则表达式模式之间切换 - * `ctrl F` \[搜索窗口]在全路径搜索模式和仅名称搜索模式之间切换 + * `ctrl j` \[搜索窗口]向下移动搜索框 + * `ctrl k` \[搜索窗口]向上移动搜索框 + * `ctrl x` \[搜索窗口]在水平拆分窗口中打开 + * `ctrl ]` \[搜索窗口]在垂直拆分窗口中打开 + * `ctrl T` \[搜索窗口]在新选项卡页中打开 + * `ctrl ↓` \[搜索窗口]在弹出预览窗口中向下滚动 + * `ctrl ↑` \[搜索窗口]在弹出预览窗口中向上滚动 + * `ctrl R` \[搜索窗口]在模糊搜索模式和正则表达式模式之间切换 + * `ctrl F` \[搜索窗口]在全路径搜索模式和仅名称搜索模式之间切换 * `ctrl B` 使用 Leaderf 插件和 rg 命令在当前缓冲区中进行模糊搜索当前光标下的单词 * `ctrl F` 使用 Leaderf 插件和 rg 命令在所有文件中进行模糊搜索当前光标下的单词 * `gf` 在可视模式下选择文本后,使用 Leaderf 插件和 rg 命令进行精确搜索所选的文本 @@ -67,10 +68,11 @@ vim常用快捷键记录 ## 已安装插件 -* 代码补全工具(coc.nvim) -* 数状目录(nerdtree) -* VIM状态栏(`vim-airline/vim-airline`): https://gitcode.com/vim-airline/vim-airline/overview -* 注释工具(`preservim/nerdcommenter`): https://gitcode.com/mirrors/preservim/nerdcommenter/overview -* 模糊搜索(`Yggdroot/LeaderF`): https://gitcode.com/Yggdroot/LeaderF/overview - - +* 代码补全工具[neoclide/coc.nvim](https://gitcode.com/mirrors/neoclide/coc.nvim) +* 数状目录[scrooloose/nerdtree](https://gitcode.com/mirrors/scrooloose/nerdtree) +* VIM状态栏[vim-airline/vim-airline](https://gitcode.com/vim-airline/vim-airline/overview) +* VIM状态栏-皮肤[vim-airline/vim-airline-themes](https://gitcode.com/mirrors/vim-airline/vim-airline-themes) +* 注释工具[preservim/nerdcommenter](https://gitcode.com/mirrors/preservim/nerdcommenter/overview) +* 模糊搜索[Yggdroot/LeaderF](https://gitcode.com/Yggdroot/LeaderF/overview) +* Git插件[airblade/vim-gitgutter](https://gitcode.com/mirrors/airblade/vim-gitgutter) +* 标签栏[preservim/tagbar](https://gitcode.com/mirrors/preservim/tagbar) diff --git a/配置/vimrc b/配置/vimrc index 14f5cce..2b4086a 100644 --- a/配置/vimrc +++ b/配置/vimrc @@ -74,3 +74,7 @@ noremap :=printf("Leaderf! rg -e %s ", expand("")) " 按字面意思搜索视觉选择的文本 xnoremap gf :=printf("Leaderf! rg -F -e %s ", leaderf#Rg#visual()) noremap go :Leaderf! rg --recall + +" 标签栏 +nnoremap :TagbarToggle +