Compare commits

...

28 Commits

Author SHA1 Message Date
9c864f1939 [修复]修复安装脚本中普通用户安装异常的问题,将zsh和vim都改为为全局配置
Signed-off-by: 寻觅 <xunmiemail@vip.qq.com>
2025-08-07 14:57:07 +08:00
e4f4b9e0ff 修复一些权限问题
Signed-off-by: 寻觅 <xunmiemail@vip.qq.com>
2025-05-21 11:13:59 +08:00
db303dd17a [更新] 修复几处路径错误,修复 小熊猫 包管理器的安装异常
Signed-off-by: 寻觅 <xunmiemail@vip.qq.com>
2025-05-21 10:57:12 +08:00
3e1a9acae4 [更新] 添加多用户的使用体验
Signed-off-by: 寻觅 <xunmiemail@vip.qq.com>
2025-05-19 10:22:37 +08:00
ecd762ba45 [更新]更新两个安同上常用的脚本,项目重命名,优化vimrc配置,修复安装脚本因为ctags名字打错导致安装失败的问题
Signed-off-by: 寻觅 <xunmiemail@vip.qq.com>
2025-05-15 10:15:13 +08:00
20b7088ded 更新 安装.zsh
修改权限配置,避免产生警告
2025-04-16 10:20:15 +08:00
f7461b8e2a 更新 LK_bash_start.sh
修改新的Git下载链接
2025-04-09 10:21:08 +08:00
40219df6aa [更新] 优化镜像使用体验 2025-03-11 16:32:15 +08:00
52c2191f38 [更新] 移除删除详细信息,添加chsh路径识别 2025-03-11 15:51:02 +08:00
eea6cc9dce [更新] 更新镜像源 2025-03-11 15:36:22 +08:00
6f294c246b 更新 安装.zsh
修复变量引用错误
2024-09-05 13:13:42 +08:00
2adb9222f9 更新 安装.zsh
添加 ludovicchabant/vim-gutentags (Tag生成器)
2024-09-02 14:35:56 +08:00
f4200e714d 更新 公共/函数.zsh 2024-08-30 14:34:48 +08:00
821f363ad7 [更新] 优化zshrc配置脚本 2024-08-30 09:34:49 +08:00
69befa7ad0 [更新] 优化自动安装流程 2024-08-29 17:50:46 +08:00
9ea3fa2c02 [更新] 更新zsh配置 2024-07-24 17:36:24 +08:00
5b30214eb4 [更新] 更换新的git地址,修复旧世界vim可能无法回退的问题 2024-07-12 14:32:39 +08:00
cb1062ff89 [新增] 添加命令行帮助信息以及预设安装模式与可选镜像源安装 2024-07-12 14:26:42 +08:00
c8ac7b472c [更新] 优化sudo特权使用方式 2024-06-04 11:19:32 +08:00
f704cae1a0 [更新] 优化 定制/龙架构/loongjet.sh 模块的新旧世界识别模块 2024-04-03 09:46:39 +08:00
cd3d9f0c76 [更新] 优化 定制/龙架构/loongjet.sh 模块的新旧世界识别模块 2024-04-03 09:44:54 +08:00
c7033b6da9 [新增] 新增'公共>开发环境.zsh'中Go语言的检测部署功能, 新增'公共>函数.zsh'中的获解函数, 优化解压函数, 优化输出函数, 新增两个vim插件, git处理和标签栏 2024-04-02 01:17:36 +08:00
21b5b97c1f 合并分支 2024-03-19 23:58:32 +08:00
9153924a69 [更新] 优化目录结构 2024-03-19 23:57:50 +08:00
24d2258c4b [更新] 新增两个vim插件, git处理和标签栏 2024-03-18 16:51:45 +08:00
4afc66bdc5 [新增] 添加'公共/函数.zsh'->'版本对比'模块, 将zsh配置从bash脚本移动到zsh中, 初步搭建go语言自动安装模块, 优化'安装.zsh'和"start.sh" 2024-03-13 22:18:06 +08:00
b89996c7db [更新] 修复zsh安装异常 2024-03-08 02:47:23 -05:00
1e89186e6e [新增] 新增vim使用文档, 优化vim配置, 添加快捷键说明, 修复git和vim部分情况下中文显示utf8编码而不是可读文字的问题 2024-03-07 17:42:47 +08:00
17 changed files with 769 additions and 427 deletions

View File

@ -1,11 +1,11 @@
# 介绍
欢迎使用 言灵(effective language) 本工具用于在 `龙`(Loong) 架构和其他常用主机架构上的Linux系统中自动配置一个便捷好用的命令行
欢迎使用 言灵(effective language) 本工具用于在 `龙架构` 和其他常用主机架构上的Linux系统中自动配置一个便捷好用的命令行
使用zsh替代老旧的bash, 使用一些现代化的工具替代老旧工具集, 并且将部分命令添加汉化别名, 避免长时间未使用时遗忘命令
```bash
# 言灵安装命令, 请在命令行中执行如下命令
wget -q --show-progress https://gitea.whlug.cn/xunmi/x/raw/start.sh && bash start.sh
wget -q --show-progress https://gitea.whlug.cn/LK/YL/raw/YL_start.sh && bash YL_start.sh
```
## 功能实现

73
start.sh → YL_start.sh Executable file → Normal file
View File

@ -1,11 +1,11 @@
#!/usr/bin/bash
# wget -qO- https://gitea.whlug.cn/xunmi/getLinux/raw/start.sh | bash
PACK_LIST=("git" "zsh")
# 脚本根地址
ROOT_URL="https://gitea.whlug.cn/xunmi/x/"
# 插件和依赖安装的路径
ROOT_INSTALL=/opt/xunmi
ROOT_URL="https://gitea.whlug.cn/LK/x"
# 脚本安装默认路径
ROOT_INSTALL="/usr/share/言灵"
###############################################################################
# 终端配色 #
###############################################################################
@ -17,9 +17,7 @@ readonly aCOLOUR=(
'\e[90m' # 2: 灰
'\e[91m' # 3: 红
'\e[32m' # 4: 绿
'\e[33m' # 5: 黄
)
Show() {
if (($1 == 0)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} 成功 $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
@ -28,19 +26,11 @@ Show() {
exit 1
elif (($1 == 2)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[4]} 信息 $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
elif (($1 == 3)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[5]} 通知 $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
fi
}
Warn() {
echo -e "${aCOLOUR[3]}$1$COLOUR_RESET"
}
GreyStart() {
echo -e "${aCOLOUR[2]}\c"
}
ColorReset() {
echo -e "$COLOUR_RESET\c"
}
@ -50,7 +40,7 @@ ColorReset() {
###############################################################################
# 更新包管理器
Update_Package_Resource() {
Update_PKG() {
Show 2 "更新包管理器..."
GreyStart
if [ -x "$(command -v oma)" ]; then
@ -66,9 +56,10 @@ Update_Package_Resource() {
# 安装依赖
Install_PKG() {
Update_Package_Resource
Update_PKG
for ((i = 0; i < ${#PACK_LIST[@]}; i++)); do
pack=${PACK_LIST[i]}
[ -x "$(command -v $pack)" ] && continue
Show 2 "安装必要的依赖项: ${aCOLOUR[4]} $pack $COLOUR_RESET"
GreyStart
if [ -x "$(command -v oma)" ]; then
@ -87,55 +78,33 @@ Install_PKG() {
Show 0 "依赖安装完成"
}
# 下载配置
Download_Config() {
# 创建下载文件的临时目录
Show 0 "正在进行插件下载与配置"
# 下载zsh扩展
GreyStart
ohmyzsh_dir=${ROOT_INSTALL}/oh-my-zsh
sudo rm -vrf $ohmyzsh_dir
sudo git clone https://gitcode.com/mirrors/ohmyzsh/ohmyzsh.git ${ohmyzsh_dir} || Show 1 "关键依赖下载失败"
cd ${ohmyzsh_dir}/custom/plugins/
sudo git clone https://gitcode.com/mirrors/zsh-users/zsh-autosuggestions.git
sudo git clone https://gitcode.com/mirrors/zsh-users/zsh-syntax-highlighting.git
# 下载预设配置
config_url=${ROOT_URL}raw/配置/zshrc
sudo wget -t 3 -q --show-progress -c "${config_url}" || Show 1 "无法下载预设配置( ${config_url} )"
sudo sed -i "s:export ZSH=/etc/oh-my-zsh:export ZSH=$ohmyzsh_dir:" zshrc
sudo mv zshrc /etc/skel/.zshrc
cp -v /etc/skel/.zshrc $HOME
cd $HOME
ColorReset
Show 2 "寻觅基础环境安装完成"
}
Download_X(){
Show 0 "开始下载配置言灵"
GreyStart
x_dir=$ROOT_INSTALL/x
sudo rm -vrf $x_dir
sudo git clone $ROOT_URL $x_dir || Show 1 "言灵拉去失败"
echo "言灵一路径=$ROOT_INSTALL" >> $ROOT_INSTALL/信息
ColorReset
X_START=1
}
#################################################################
# 主函数(main) #
#################################################################
([ -x "$(command -v git)" ] && [ -x "$(command -v zsh)" ]) || Install_PKG
# 如果携带 -c 则不下载安装ohmyzsh
([ -x "$(command -v zsh)" ] || [[ "$@" == *-c* ]]) || Download_Config
# 如果携带 -x 则不下载安装言灵
[[ "$@" == *-x* ]] || Download_X
sudo chown -R $USER:$USER $x_dir
# 写入配置文件
mkdir -p $HOME/.config/xunmi
echo "寻觅=${ROOT_INSTALL}" > $HOME/.config/xunmi/PATH.sh
if [ -f "安装.zsh" ]; then
zsh 安装.zsh
Install_PKG
Download_X
sudo chown -R $USER:$USER $ROOT_INSTALL
# 删除自己
if [ -f "./安装.zsh" ]; then
echo "启动调试模式"
zsh 安装.zsh -预设 -镜像 -调试
else
(( $X_START == 1 )) && zsh $x_dir/安装.zsh
zsh $x_dir/安装.zsh -预设 -镜像
rm YL_start.sh
fi
exec zsh

View File

@ -1,54 +0,0 @@
#!/bin/zsh
# 这个脚本可以根据文件 16 进制判断压缩格式,然后通过对应命令解压
# 解压函数:file 接收文件名,cmd 接收命令,opt 参数选项
decompress() {
file=$1
cmd=$2
opt=$3
$cmd $opt $file
}
# 数组:存储支持的压缩格式和对应的文件头和解压命令
# 每个元素的格式为:文件 16 进制头:解压命令:选项
formats=(
377abcaf:7z:x
213c6172:ar:x
425a6839:bunzip2:
504b0304:unzip:
7f454c46:7z:x
1f8b0808:gunzip:
5d000080:unlzma:
1f8b0800:tar:-zxvf
fd377a58:unxz:
)
#判断是否为 tar
filesion=$(file $1 | cut -d':' -f2-)
if [[ "$filesion" == *tar* ]]; then
tar -xvf "$1"
#判断是否为文件
elif [[ -f $1 ]]; then
header=$(xxd -p -l 4 $1)
# 定义一个变量,表示是否找到匹配的格式
found=0
# 遍历数组,匹配文件头和解压命令
for format in $formats; do
# 使用 IFS 分隔数组元素的各个字段
IFS=: read head cmd opt <<< $format
# 如果文件头匹配,调用解压函数,并设置 found 为 1
if [[ $header == $head* ]]; then
decompress $1 $cmd $opt
found=1
break
fi
done
# 如果没有找到匹配的格式,打印提示信息
if [[ $found == 0 ]]; then
echo "无法识别的压缩格式"
fi
else
echo "不是一个文件"
fi

View File

@ -23,13 +23,15 @@ readonly 色彩=(
'\e[32m' # 4: 暗绿
'\e[33m' # 5: 暗黄
'\e[95m' # 6: 亮紫
'\e[100m' # 7: 背景灰
)
# 用于规范输出的工具
# 位置参数 1 -> 整数 <- 1: 成功(亮绿); 2: 失败(暗红); 3: 信息(绿色); 4: 通知(黄色); 5: 异常(紫色)
# 位置参数 2 -> 字符 <- 在命令行输出的字符串
# 实例 `输出 0 "执行成功"`; `输出 3 "请及时更新依赖"`
# 例: `输出 0 "执行成功"`; `输出 3 "请及时更新依赖"`
# *-* 一 -> 整数 <- 0: 成功(亮绿); 1: 失败(暗红); 2: 信息(绿色); 3: 通知(黄色); 4: 异常(紫色)
# *-* 二 -> 字符 <- 在命令行输出的字符串
输出() {
echo -n "($(date +"%Y-%m-%d %H:%M:%S"))"
if (($1 == 0)); then
echo -e "${色彩[2]}[${色彩重置}${色彩[1]} 成功 ${色彩重置}${色彩[2]}]${色彩重置} $2"
elif (($1 == 1)); then
@ -42,6 +44,11 @@ readonly 色彩=(
elif (($1 == 4)); then
echo -e "${色彩[2]}[${色彩重置}${色彩[6]} 异常 ${色彩重置}${色彩[2]}]${色彩重置} $2"
return 1
elif (($1 == 5)); then
# 传入是否启用调试模式的一个参数
if $3; then
echo -e "${色彩[2]}[${色彩重置}${色彩[7]} 调试 ${色彩重置}${色彩[2]}]${色彩重置} $2"
fi
fi
}
@ -59,14 +66,71 @@ readonly 色彩=(
# 通用函数 #
###############################################################################
# 用判断用户输入的值, 输入 `是/Y/y/yes` 返会0, 其他情况返会1
# 位置参数 1 -> 字符 <- 用于提示用户选择时候的提示语
# 更具用户输入判断是否需要继续
# *-* 一 -> 字符 <- 用于提示用户选择时候的提示语
# -*- 返回值: 如果 输入`是/Y/y/yes` 返会0, 其他情况返会1
是否() {
输出 3 "$1((是/否 Yes/No))"
read r
if echo "$r" | grep -Eq "^[是Yy][Ee]?[Ss]?$";then
return 0
fi
输出 3 "$1((是/否 Yes/No))"
read r
if echo "$r" | grep -Eq "^[是Yy][Ee]?[Ss]?$";then
return 0
fi
return 1
}
# 用于判断两个版本号之间的大小
# 备注: 版本格式实例 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 1
elif (( ${版本数组A[i]} < ${版本数组B[i]} )); then
return 0
fi
done
# 如果循环结束仍未返回,则认为两个版本号相等
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 ${文件名} ;;
*) 输出 5 "不支持的压缩格式" ;;
esac
}
# 自动获取并且解压压缩包
# *-* 一 -> 字符(网址) <- 在线获取压缩包的地址
获解(){
wget -t 3 --content-disposition -q --show-progress -c $1 || 输出 5 "无法下载程序包"
包名="$(ls -t | head -n1)"
输出 2 "已获取${包名}"
解压 ${包名}
}

View File

@ -17,14 +17,14 @@
# 实例 `包管_更新 -n`; `包管_更新 -确认`
包管一更新() {
if [ -x "$(command -v oma)" ]; then
# sudo oma refresh
sudo oma update -y
${特权} oma refresh
# ${特权} oma update -y
elif [ -x "$(command -v apt)" ]; then
sudo apt-get update -qq
${特权} apt-get update -qq
elif [ -x "$(command -v yum)" ]; then
sudo yum update
${特权} yum update
elif [ -x "$(command -v pacman)"]; then
sudo pacman -Syu
${特权} pacman -Syu
fi
}
@ -34,14 +34,14 @@
if [ -x "$(command -v oma)" ]; then
# 解决oma找不到软件包返回值还是0的问题, 先搜索一下软件包
# 神奇的oma居然不走标准输出(2>&1, 将错误输出重定向到标准输出, 方便管道符处理), 坑人啊
sudo oma search $1 2>&1 | head -n 1 | grep -q '\[完整匹配\]' || return 1
sudo oma install -y $1
${特权} oma search $1 2>&1 | head -n 1 | grep -q '\[*完整匹配*\]' || return 1
${特权} oma install -y $1
elif [ -x "$(command -v apt)" ]; then
sudo apt -y install $1
${特权} apt -y install $1
elif [ -x "$(command -v yum)" ]; then
sudo yum install -y $1
${特权} yum install -y $1
elif [ -x "$(command -v pacman)" ]; then
sudo pacman -Sy --needed $1
${特权} pacman -Sy --needed $1
else
return 1
fi

109
公共/开发环境.zsh Normal file
View File

@ -0,0 +1,109 @@
#!/usr/bin/zsh
#####################################
# 自动配置常用开发环境 #
# [x] go #
# [x] rust #
# [ ] java #
# [ ] nodejs #
#####################################
# 不使用包管理器, 直接用官网的二进制包
# 龙芯旧世界更新频率低, 且迟早被弃用, 旧世界仅做有限支持
#############################################################################
# 变量 #
#############################################################################
# 加载基础环境
source $HOME/.config/xunmi/信息
# source $HOME/x/公共/函数.zsh
source ${言灵一路径}/x/公共/函数.zsh
路径一开发环境="${言灵一路径}/ide"
mkdir -p ${路径一开发环境}
# 配置全局变量
local 旧世界一下载地址="http://ftp.loongnix.cn"
typeset -A 语言一GO=(
['组件']=('go' 'gofmt')
['下载地址']="https://golang.google.cn/dl/"
['版本正则']="go1.*linux-架构\.tar\.gz"
['旧世界版本']="go1.22.0"
)
#############################################################################
# 函数(func) #
#############################################################################
开发环境一检测一GO(){
# 检测安装情况
unset 下载地址
# 获取在线版本
版本一在线=$(curl -s ${语言一GO[下载地址]} | grep -o $(echo "${语言一GO[版本正则]}" | sed "s/架构/${言灵一系统架构}/g") | head -n 1)
语言一GO[下载地址]="${语言一GO[下载地址]}${版本一在线}"
if [[ ${系统一世界类型} == "旧世界" ]]; then
输出 4 "[GO检测]旧世界支持开发兼容性较差,建议尽快迁移进入龙芯新世界!"
版本一在线=${语言一GO[旧世界版本]}
语言一GO[下载地址]="${旧世界一下载地址}/toolchain/golang/${版本一在线%.*}/abi1.0/${版本一在线}.linux-loong64.tar.gz"
fi
输出 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 <- 需要检测的编程语言
开发环境一检测(){
}
# 加载主机信息
开发环境一初始化(){
if [[ ${言灵一系统一主机架构} == "龙" ]]; then
if [[ ${言灵一系统一世界类型} == "新世界" ]]; then
系统一主机架构="loong64"
fi
fi
系统一主机架构=${言灵一系统一主机架构}
}
开发环境一部署一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 -
}
开发环境一部署(){
}
###############################################################################
# 主函数(main) #
###############################################################################
开发环境一初始化
开发环境一检测一GO
# 开发环境一部署一GO

View File

@ -1,2 +0,0 @@
pacman -Syu
pkgfile --update

View File

@ -9,13 +9,16 @@ source /etc/os-release
# 脚本在执行过程中遇到任何非零返回码的命令时立即退出
# set -e
readonly 言灵一版本="v1.1.1"
###############################################################################
# 全局变量 #
###############################################################################
typeset -a 通用一包列表=('wget' 'curl' 'git' 'vim' 'ctag' 'sudo')
typeset -a 架构一包列表=()
typeset -a 通用一包列表=('wget' 'curl' 'git' 'vim')
typeset -a 系统一包列表=()
readonly CPU一架构="$(uname -m)"
readonly 系统一类型="$(uname -s)"
readonly 系统一版本="$(uname -r)"
@ -26,22 +29,87 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
# 龙架构区分新旧世界的标志位
世界一类型="旧世界"
用户名=$USER
if command -v sudo >/dev/null 2>&1; then
特权="sudo"
else
特权=""
fi
typeset -a 预设一默认=("vim" "zsh")
readonly 言灵一镜像站="https://gitcode.com"
配置一预设=false
配置一镜像=false
配置一调试=false
# 帮助信息
帮助一信息=$(cat <<EOF
用法: $0 [选项]
选项:
-h, -帮助 显示帮助信息
-v, -版本 显示版本信息
-Y, -预设 使用预设配置安装 ${预设一默认}
-J, -镜像 使用镜像源安装 ${言灵一镜像站}
-T, -调试 启动调试符号(会输出一些调试信息)
示例:
$0 -h 显示此帮助信息
$0 -Y -J 使用预设配置和镜像源安装
EOF
)
###############################################################################
# 函数/方法 #
###############################################################################
# 调用包管理器批量安装
批量安装(){
typeset -a 包列表=($@)
输出 2 "计划安装列表: ${包列表}"
local 包列表=(${(P)1})
输出 5 "计划安装列表: ${包列表[@]}" $配置一调试
for 包 in "${包列表[@]}";do
输出 2 "正在安装 -> ${} <-"
输出 5 "开始尝试安装: ${}" $配置一调试
色彩一灰色
包管一安装 ${}
色彩一清除
done
}
# 从git镜像仓库获取依赖
# *-* -> 位置参数 1 <- 拉取`作者/仓库名`
# *-* -> 位置参数 2 <- 保存地址, 保存到本地的哪个路径
获取一git(){
色彩一灰色
if [ -z "$2" ]; then
输出 2 "正在拉取 $1 ..."
else
输出 2 "正在拉取 $1($2) ..."
fi
if ${配置一镜像}; then
拉去地址="${言灵一镜像站}/$1.git"
else
拉去地址="https://github.com/$1.git"
fi
输出 2 "拉去地址: ${拉去地址}"
# 出现鉴权则直接退出
GIT_TERMINAL_PROMPT=0 git clone --depth 1 -q ${拉去地址} $2
if [ $? -eq 0 ]; then
输出 0 "仓库拉去成功"
else
输出 3 "仓库拉去失败"
if ${配置一镜像}; then
拉去地址="https://gitea.whlug.cn/LK/${1#*/}.git"
输出 2 "尝试从龙架构开发者仓库中拉取 ${拉去地址}"
git clone --depth 1 -q ${拉去地址} $2
fi
fi
色彩一清除
}
检查一架构() {
case ${CPU一架构} in
*x86_64*)
@ -49,11 +117,6 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
;;
*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
@ -77,7 +140,12 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
系统一发行版一标识符="安同"
# 前三个是字体包
系统一包列表=('jetbrains-mono' 'powerline-fonts' 'fantasque-sans-mono-nerd-fonts')
;;
;;
*debian*)
if [[ ${系统一发行版一名称}=="Ubuntu" ]]; then
系统一发行版一标识符="乌班图"
fi
;;
*openwrt*)
输出 1 "暂不支持openwrt"
exit 1
@ -102,42 +170,89 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
输出 2 "主机信息检测模块启动"
检查一架构
检查一发行版
# 检查本地版本
if [[ -n ${言灵一本地版本} ]]; then
if 版本对比 ${言灵一版本} ${言灵一本地版本}; then
是否 "发现本地版本已是最新版, 是否需要重复安装" || 输出 1 "已退出安装"
fi
fi
# 将本机信息更新到指定文件
mkdir -vp ${目录一配置}
rm -v ${目录一配置}/信息.zsh
echo "系统一发行版标识=${系统一发行版一标识符}" >> ${目录一配置}/信息.zsh
echo "系统一世界类型=${世界一类型}" >> ${目录一配置}/信息.zsh
echo "系统一主机架构=${主机一架构}" >> ${目录一配置}/信息.zsh
rm ${配置信息}
echo "言灵一路径=${言灵一路径}" >> ${配置信息}
echo "言灵一发行系统=${系统一发行版一标识符}" >> ${配置信息}
if [[ ${主机一架构} == "龙" ]];then
echo "言灵一世界类型=${世界一类型}" >> ${配置信息}
fi
echo "言灵一系统架构=${主机一架构}" >> ${配置信息}
${特权} cp -v ${配置信息} ${言灵一路径}
输出 0 "主机信息检测完毕"
}
优化一常用命令一zsh(){
# 创建下载文件的临时目录
输出 2 "启动zsh优化"
# 下载zsh扩展
色彩一灰色
配置一路径=${言灵一路径}/oh-my-zsh
${特权} rm -rf ${配置一路径}
获取一git ohmyzsh/ohmyzsh ${配置一路径}
获取一git zsh-users/zsh-autosuggestions ${配置一路径}/custom/plugins/zsh-autosuggestions
获取一git zsh-users/zsh-syntax-highlighting ${配置一路径}/custom/plugins/zsh-syntax-highlighting
${特权} chmod -R 755 ${配置一路径}
if [ -f $HOME/.zshrc ]; then
mv $HOME/.zshrc $HOME/.zshrc.old
fi
cat "${言灵一路径}/信息" >> "$HOME/.zshrc"
cat "${目录一根}/配置/zshrc" >> "$HOME/.zshrc"
是否 "是否需要将zsh预设配置赋予所有新用户" && ${特权} cp $HOME/.zshrc /etc/skel/.zshrc
if 是否 "将Zsh设置为默认命令行"; then
if [ -f /bin/zsh ]; then
chsh -s /bin/zsh
elif [ -f /usr/bin/zsh ]; then
chsh -s /usr/bin/zsh
else
输出 3 "在常用位置未找到zsh, 请手动使用 chsh -s [zsh绝对路径] 配置 "
fi
输出 0 "此设置主要适用于ssh和tty如终端不生效则需要在可视化设置中手动配置启动时加载 '/usr/bin/zsh' "
else
输出 2 "如需将zsh设置为默认命令行请执行: 'chsh -s /usr/bin/zsh' "
fi
色彩一清除
${特权} chown -R root:root ${配置一路径}
输出 0 "Zsh优化完成"
}
优化一常用命令一vim(){
输出 2 "启动vim优化, 安装代码检查和树状目录插件, 并优化配置(具体配置可以查看 $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
# 安装tag
标签包名=('universal-ctags' 'ctags')
批量安装 标签包名 && 输出 0 "VIM必要依赖标签安装完毕"
vim一配置路径=/usr/share/vim/vimfiles/pack/言灵
色彩一灰色
if [ -f /etc/vim/vimrc ]; then
${特权} mv /etc/vim/vimrc /etc/vim/vimrc.old
fi
${特权} cp -v ${目录一根}/配置/vimrc /etc/vim/vimrc
${特权} rm -rf ${vim一配置路径}
${特权} mkdir -vp ${vim一配置路径}/{opt,start}
获取一git scrooloose/nerdtree ${vim一配置路径}/start/树状目录
获取一git jiangmiao/auto-pairs ${vim一配置路径}/start/括号补齐
获取一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 ludovicchabant/vim-gutentags ${vim一配置路径}/start/Tag生成器
获取一git preservim/tagbar ${vim一配置路径}/start/标签栏
获取一git Yggdroot/LeaderF ${vim一配置路径}/start/模糊搜索器
色彩一清除
输出 0 "Zsh优化完成"
}
优化一常用命令一ls(){
@ -152,7 +267,7 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
fi
cargo install "lsd"
fi
sudo ln -vs $HOME/.cargo/bin/lsd /usr/bin/lsd
${特权} ln -vs $HOME/.cargo/bin/lsd /usr/bin/lsd
色彩一清除
if 是否 "将lsd使用别名的方式替代ls"; then
别名='alias ls="lsd"'
@ -166,9 +281,9 @@ 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 mv -v xmtop_${世界一类型} /usr/bin/xmtop
sudo chmod 755 /usr/bin/xmtop
${特权} wget -t 3 -q --show-progress -c ${xmtop_url} || 输出 5 "无法下载程序包"
${特权} mv -v xmtop_${世界一类型} /usr/bin/xmtop
${特权} chmod 755 /usr/bin/xmtop
else
输出 2 "${主机一架构} 架构, 暂未适配top优化, 推荐手动安装gotop, btop等代替top"
fi
@ -176,35 +291,39 @@ readonly 系统一发行版一名称=$(echo "${NAME}")
}
优化一常用命令(){
# 优化git, 修复git中文显示为8进制风格的问题
git config --global core.quotepath false
git config --global core.editor "vim"
typeset -A 列表=(
["zsh"]="添加omyzsh, zsh自动补齐, 快速添加${特权}, 便捷操作目录, 优化命令行提示符等"
["vim"]="添加常用配置项(允许复制 添加行号 显式当前行等), 常用插件(目录 语法检测)"
["ls"]="使用lsd替代老旧的ls, (lsd是rust编写的兼容ls的目录查看工具, 其丰富的配色和图标可有效增加目录的可读性)"
#["cat"]="使用bat替代cat"
["top"]="使用xmtop替代老旧的top系统信息监控功能"
#["sed"]="使用学习成本较低的sd替代sed"
)
输出 2 "正在优化 ${(k)列表} 命令"
# 遍历关联数组
for 键 值 in ${(kv)列表}; do
if 是否 "是否启动 '${}' 命令优化 -> ${} <- "; then
优化一常用命令一${}
else
输出 3 "已取消 ${} 的优化"
fi
done
# 查看预设是否被启动
if ${配置一预设}; then
输出 2 "正在优化 ${预设一默认} 命令"
for 默认 in "${预设一默认[@]}";do
echo "正在启动 ${默认} 优化, ->${列表[$默认]}<-"
优化一常用命令一${默认}
done
else
输出 2 "正在优化 ${(k)列表} 命令"
# 遍历关联数组
for 键 值 in ${(kv)列表}; do
if 是否 "是否启动 '${}' 命令优化 -> ${} <- "; then
优化一常用命令一${}
else
输出 3 "已取消 ${} 的优化"
fi
done
fi
}
选配(){
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) #
###############################################################################
@ -215,11 +334,11 @@ echo "
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
"
目录一根=$PWD
目录一配置=$HOME/.config/xunmi
配置信息="/usr/share/言灵/信息"
source ${配置信息}
# 判断当前执行的位置 如果不再项目路径中就去寻找路径
if [ ! -f "公共/函数.zsh" ]; then
source ${目录一配置}/*
目录一根=${寻觅}/x
目录一根=${言灵一路径}/x
fi
echo "执行目录: ${目录一根}"
@ -227,13 +346,47 @@ echo "执行目录: ${目录一根}"
[[ ${言灵一函数} == 1 ]] || . ${目录一根}/公共/函数.zsh || exit 2 && 输出 0 "公共函数模块初始化完成"
[[ ${言灵一包管} == 1 ]] || . ${目录一根}/公共/包管.zsh || exit 3 && 输出 0 "包管理器模块初始化完成"
# 处理用户输入
# 使用 case 语句检查命令行参数
while [[ $# -gt 0 ]]; do
case "$1" in
-h | -帮助 | --help )
echo "\n*-*-*-*-*-*-*-*-*-*-*-*-*-*\n"${帮助一信息}
exit 0
;;
-v | -版本 | --version )
echo "版本号:${言灵一版本}"
exit 0
;;
-Y | -预设)
输出 2 "启用预设模式"
配置一预设=true
;;
-J | -镜像)
输出 2 "启动镜像下载"
配置一镜像=true
;;
-T | -调试)
输出 2 "启动镜像下载"
配置一调试=true
;;
*)
输出 4 "未知选项 -> $1 <- "
echo ${帮助一信息}
exit 0
;;
esac
shift
done
配置检测
[[ ${#通用一包列表} -ne 0 ]] && 批量安装 ${通用一包列表[@]} && 输出 0 "通用包安装完毕"
[[ ${#架构一包列表} -ne 0 ]] && 批量安装 ${架构一包列表[@]} && 输出 0 "架构专用包安装完毕"
[[ ${#系统一包列表} -ne 0 ]] && 批量安装 ${系统一包列表[@]} && 输出 0 "系统发行版专用包安装完毕"
[[ ${#通用一包列表} -ne 0 ]] && 批量安装 通用一包列表 && 输出 0 "通用包安装完毕"
[[ ${#系统一包列表} -ne 0 ]] && 批量安装 系统一包列表 && 输出 0 "系统发行版专用包安装完毕"
优化一常用命令
# 配置一开发环境
选配
echo "言灵一本地版本=${言灵一版本}" >> ${配置信息}
输出 0 "已成功安装 言灵 ${言灵一版本}"

60
定制/AOSC-初始化.zsh Normal file
View File

@ -0,0 +1,60 @@
#!/usr/bin/env zsh
sudo oma remove v2ray v2ray-rules-dat clash mihomo linux+kernel
sudo oma remove "linux-kernel-6*"
sudo oma autoremove
sudo oma install linux+kernel+lts
用户名="xunmi"
while true; do
read -r "?请输入用户名(默认:xunmi): "
[[ -n $REPLY ]] && 用户名=$REPLY
# 验证用户名格式
if [[ $用户名 =~ ^[a-z_][a-z0-9_-]*$ ]]; then
break
else
echo "错误:用户名只能包含小写字母、数字、下划线和连字符,且不能以数字开头"
fi
done
# 从当前用户获取组列表
原始组列表=$(id -Gn)
# 去掉当前用户自己本身的组并将空格变成逗号间隔
有效附加组=${(j:,:)${=原始组列表}[2,-1]}
echo "正在创建用户 ${用户名} ( 配置组: ${有效附加组} ), 请输入当前用户的密码..."
if ! sudo useradd -m -s /bin/bash -G ${有效附加组} ${用户名}; then
echo "创建用户失败!请检查权限或用户是否已存在" >&2
exit 1
fi
# 设置密码
echo "请为 ${用户名} 设置密码:"
until sudo passwd $用户名; do
echo "密码设置失败,请重试..."
done
# 修改主机名
当前主机名=$(</etc/hostname)
echo "当前主机名:$当前主机名"
read -r "?请输入新主机名(回车保持当前): " 新主机名
新主机名=${新主机名:-$当前主机名}
## 验证主机名格式
while [[ ! $新主机名 =~ ^[a-zA-Z0-9-]{1,63}$ ]]; do
read -r "?无效格式!请重新输入(仅限字母数字和连字符,最长63字符): " 新主机名
done
if [[ -n "$新主机名" ]]; then
if echo "$新主机名" | sudo tee /etc/hostname >/dev/null; then
echo "主机名已更新,重启后生效"
echo "建议执行:sudo hostnamectl set-hostname $新主机名"
else
echo "主机名修改失败!" >&2
fi
fi
echo "用户 $用户名 创建完成!"

View File

@ -0,0 +1,122 @@
#!/usr/bin/env zsh
# 磁盘格式化自动化脚本
# 功能:检测未格式化磁盘 → 用户选择 → GPT分区 → ext4格式化 → 安全挂载
(( $UID )) && { echo "请用root运行"; exit 1 }
# 函数:获取有效挂载点
获取挂载点() {
local 挂载点
while true; do
vared -p "请输入挂载点路径(默认 /data): " -c 挂载点
挂载点=${挂载点:-/data} # 设置默认值
# 校验路径格式
[[ $挂载点 != /* ]] && echo "错误:必须使用绝对路径" && continue
# 检查目录状态
if [[ -d $挂载点 ]]; then
if [[ -n $(ls -A $挂载点 2>/dev/null) ]]; then
echo "警告:目录非空!"
read -q "确认?[y/n] " || { echo; continue }
fi
else
mkdir -p $挂载点 2>/dev/null || { echo "无法创建目录"; continue }
fi
break
done
echo $挂载点
}
选择磁盘() {
# 用户选择磁盘
echo "可格式化的磁盘:"
PS3="请选择磁盘编号: "
select 磁盘 in $1; do
[[ -n $磁盘 ]] && break || echo "无效选择"
done
while true; do
echo -n "确认格式化 $磁盘? [y/n] "
read -k 1 确认
case $确认 in
[Yy]) echo; break ;;
[Nn]) echo "\n操作取消"; exit 0 ;;
*) echo "\n无效输入,请按 y 或 n" ;;
esac
done
}
# 获取未挂载的磁盘
未挂载磁盘=($(lsblk -dpno NAME | grep -Ev '/dev/(sr|loop)' | while read dev; do
[[ -z $(lsblk -dnfo FSTYPE $dev) ]] && ! grep -q $dev /proc/mounts && echo $dev; done))
选择磁盘 $未挂载磁盘
(( ${#未挂载磁盘} == 0 )) && { echo "未找到未挂载的磁盘"; lsblk $磁盘 }
echo "请务确认是否要格式化如下磁盘!(按Ctrl+c停止)"; lsblk $磁盘
总时间=3
倒计时=$总时间
echo -ne "\e[?25l"
while (( 倒计时 >= 0 )); do
# 计算进度长度(0-20)
进度=$(( (总时间 - 倒计时) * 20 / 总时间 ))
# 生成进度条字符串(使用Zsh填充语法)
进度条=${(l:进度:::)} # 左侧填充方块
空白条=${(l:20-进度:: :)} # 右侧填充空格
# 修复printf格式字符串
printf "\r[%s%s] %2d 秒 " $进度条 $空白条 $倒计时
(( 倒计时-- ))
sleep 1
done
echo -e "\a\n\e[32m▶ 开始格式化!\e[0m"
echo -ne "\e[?25h"
# 创建分区
echo "\n正在创建GPT分区..."
parted -s $磁盘 mklabel gpt && parted -s -a optimal $磁盘 mkpart primary 0% 100% || {
echo "分区失败"; exit 1
}
分区="${磁盘}1"
sleep 2
# 格式化
echo "正在格式化为ext4..."
mkfs.ext4 -F $分区 || { echo "格式化失败"; exit 1 }
# 准备挂载
挂载点=$(获取挂载点)
echo "设置挂载点为:$挂载点"
UUID=$(blkid -s UUID -o value $分区)
# 备份fstab
echo "\n备份/etc/fstab -> /etc/fstab.bak"
cp /etc/fstab{,.bak}
# 安全挂载
{
echo "\n# 由自动化脚本添加 $(date)" >> /etc/fstab
echo "UUID=$UUID $挂载点 ext4 defaults 0 2" >> /etc/fstab
if mount -a; then
echo "\n挂载成功!"
df -h $挂载点
else
echo "\n挂载失败,正在恢复备份..."
mv /etc/fstab.bak /etc/fstab
echo "已恢复原始fstab配置"
exit 1
fi
} always {
echo "\n操作完成"
}

View File

@ -1,5 +1,10 @@
# 更新环境
pacman -Syu
pkgfile --update
# 清理pacman的下载缓存
## 清理时保留最近一个版本的包
paccache -rk1
## 清理所有以及卸载的包
paccache -ruk0

View File

@ -0,0 +1,78 @@
# 寻觅的vim用法
言灵vim配置用法, 查看此教程前需对vim有一定了解, 如果您完全没有使用过vim, 请在命令行中执行 `vimtutor` 学习vim相关操作后再来查看此vim扩展
> 最少查看 `vimtutor` 的前三章
## 快捷键
vim常用快捷键记录
> 备注: <占位符>(\<leader>): 自定义键盘前缀, 默认为反斜杠`\` 在`~/.vimrc`可自定义 -> `let mapleader = 'x'`
> 冒号 `:` 开头的快捷键是需要用户在预览模式下输入启动
* `[数量]<占位符>cc` 注释当前行和选中行
* `[数量]<占位符>ci` 执行反转注释操作,选中区域注释部分取消注释,非注释部分添加注释
* `[数量]<占位符>cA` 跳转到该行结尾添加注释,并进入编辑模式
* `[数量]<占位符>cu` 取消注释
* `ctrl ]` 跳转到光标下的函数定义处
* `*` 在本文件中查找函数或变量
* `ctrl o` 返回跳转之前的位置
* `ctrl i` 返回 `ctrl o` 跳转之前的位置
* `]c` 跳转到下一个修改的位置
* `[c` 跳转到上一个修改的位置
* `ctrl g` 打开属性栏
* `ctrl n` 打开目录栏
* `<占位符>n` 将光标聚焦到目录
* `ctrl t` 切换目录状态(打开则关闭, 关闭则打开)
* `ctrl f` 打开目录搜索框
* `ctrl w` 多个窗口之间切换焦点, 按下此快捷键后在按上下左右或者k(上)j(下)h(左)l(右)
* `:sp` 水平切分窗口
* `:vsp` 垂直切分窗口
* `ctrl 6` 切换缓冲区
* `:bn` 切换到下一个缓冲区
* `:bp` 切换到上一个缓冲区
* `<占位符>ff` 目录搜索(相当于:Leaderf file)
* `<占位符>fb` 缓冲区搜索(相当于:Leaderf buffer)
* `<占位符>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 B` 使用 Leaderf 插件和 rg 命令在当前缓冲区中进行模糊搜索当前光标下的单词
* `ctrl F` 使用 Leaderf 插件和 rg 命令在所有文件中进行模糊搜索当前光标下的单词
* `gf` 在可视模式下选择文本后,使用 Leaderf 插件和 rg 命令进行精确搜索所选的文本
* `go` 执行上次搜索
## 代码补全工具(coc.nvim)
```vim
# 安装
:CocInstall [包名]
# 更新
:CocUpdate
# 移除
:CocUninstall [包名]
# 查看已安装
:CocList extensions
```
## 已安装插件
* 代码补全工具[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)

View File

@ -11,6 +11,7 @@ set encoding=utf-8 " 使用 utf-8 编码
set autoindent " 按下回车键后,下一行的缩进会自动跟上一行的缩进保持一致。
set smartindent " 智能缩进
set tabstop=4 " 按下 Tab 键时,Vim 显示的空格数。
set shiftwidth=4 " 设置缩进大小为(和tabstop数值最好一样,配合使用)
filetype indent on " 开启文件类型检查,并且载入与该类型对应的缩进规则。
filetype on " 开启文件类型检测
filetype plugin indent on " 开启文件类型插件检测
@ -29,10 +30,21 @@ let g:NERDCompactSexyComs = 1 " 使用紧凑的语法来美化多行
let g:NERDTrimTrailingWhitespace = 1 " 启用在取消注释时修剪尾部空白的功能
let g:NERDToggleCheckAllLines = 1 " 启用 NERDCommenterToggle 以检查所有选定行是否已注释
" 树状目录: 使用目录启动时自动启动侧栏
" 树状目录(preservim/nerdtree): 在vim侧栏启动目录
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
" 在没有文件参数的情况下启动
autocmd VimEnter * if argc() == 0 && !exists('s:std_in') | NERDTree | endif
" 定义树状目录的快捷键
nnoremap <leader>n :NERDTreeFocus<CR>
nnoremap <C-n> :NERDTree<CR>
nnoremap <C-t> :NERDTreeToggle<CR>
nnoremap <C-f> :NERDTreeFind<CR>
" 如果目录是最后一个窗口则自动退出vim
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
let g:NERDTreeFileLines = 1 " 显示文件行
" 标签生成器(ludovicchabant/vim-gutentags): 在特定目录下自动调用ctags生成标签
set statusline+=%{gutentags#statusline()} " 在状态行中打印字符串“tag”,当Gutengs在后台生成内容时
@ -44,3 +56,29 @@ 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']
" 模糊搜索(Yggdroot/LeaderF)
let g:Lf_HideHelp = 1 " 在正常模式下不显示帮助
let g:Lf_UseCache = 0 " 不使用缓存, 避免更新文件后搜索异常
let g:Lf_UseVersionControlTool = 1 " 使用版本控制工具(如Git)来获取文件的状态信息
let g:Lf_IgnoreCurrentBufferName = 1 " 忽略当前的缓冲区名称
let g:Lf_WindowPosition = 'popup' " 窗口模式
let g:Lf_ShortcutF = "<leader>ff" " 打开LeaderF搜索界面
noremap <leader>fb :<C-U><C-R>=printf("Leaderf buffer %s", "")<CR><CR>
noremap <leader>fm :<C-U><C-R>=printf("Leaderf mru %s", "")<CR><CR>
noremap <leader>ft :<C-U><C-R>=printf("Leaderf bufTag %s", "")<CR><CR>
noremap <leader>fl :<C-U><C-R>=printf("Leaderf line %s", "")<CR><CR>
noremap <C-B> :<C-U><C-R>=printf("Leaderf! rg --current-buffer -e %s ", expand("<cword>"))<CR>
noremap <C-F> :<C-U><C-R>=printf("Leaderf! rg -e %s ", expand("<cword>"))<CR>
" 按字面意思搜索视觉选择的文本
xnoremap gf :<C-U><C-R>=printf("Leaderf! rg -F -e %s ", leaderf#Rg#visual())<CR>
noremap go :<C-U>Leaderf! rg --recall<CR>
" 标签栏
nnoremap <C-g> :TagbarToggle<CR>
" 修复旧世界可能无法使用回退键的问题
set backspace=indent,eol,start
" 当打开一个文件时,跳转到上次编辑的位置
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif

View File

@ -1,7 +0,0 @@
受限于vim特性, 没法做到执行完命令后自动退出, 如果左侧命令执行完毕, 请手动退出(:qa或:x)
完全不会使用vim请按如下操作:
等左侧执行完毕(所有下载和安装结束, 左侧内容超过五秒没发生任何变化)
1. 双击两下esc
2. 输入`:qa`( 按一下冒号,然后按字母q和a ), 这时候整个vim会退出

View File

@ -1,6 +1,15 @@
export ZSH=/etc/oh-my-zsh
# 添加环境变量
# export PATH=$HOME/bin:/usr/local/bin:$HOME/.local/bin:$PATH
# 加载基础变量
export ZSH=${言灵一路径}/oh-my-zsh
# 加载各种开发环境
if [[ -d "${配置路径}/开发环境" ]]; then
for 开发环境 in "${配置路径}"/开发环境/*.zsh; do
source "$开发环境"
done
fi
# 添加环境变量(python很喜欢将一些可执行文件放在这个位置)
export PATH=/usr/local/bin:$HOME/.local/bin:$PATH
# zsh 主题,在线预览 https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
# 推荐主题: gnzh、jispwoso[双行: 1 用户名-目录-Git]
@ -53,14 +62,23 @@ HIST_STAMPS="yyyy-mm-dd"
# 标准插件可以在 `$ZSH/plugins/` 中找到
# 自定义插件可以添加到 `$ZSH_CUSTOM/plugins/`
# 注意: 太多的插件会降低 shell 启动的速度。
# command-not-found当前仅支持debian系
# 支持fzf可以尝试使用zsh-interactive-cd,cd目录时可以模糊查找
# znt zsh官方出的导航工具:https://github.com/z-shell/zsh-navigation-tools
# 官方插件及其功能说明可以查看:https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins
# 官方插件及其功能说明可以查看: https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins
plugins=(
git
# 强大的目录自动跳转命令, 会记忆你曾经进入过的目录, 用模糊匹配快速进入你想要的目录
# 使用方法: z 路径名
z
# git别名插件
git
# 双击exc添加sudo
sudo
# 快速解压工具
# 使用方法: x 压缩包
extract
# command-not-found当前仅支持debian系
#command-not-found
# 支持fzf可以尝试使用zsh-interactive-cd,cd目录时可以模糊查找
#zsh-interactive-cd
# znt zsh官方出的导航工具: https://github.com/z-shell/zsh-navigation-tools
zsh-navigation-tools
zsh-autosuggestions
zsh-syntax-highlighting

View File

@ -1,199 +0,0 @@
#!/usr/bin/bash
###############################################################################
# 变量 #
###############################################################################
# 将终端的输出重置为默认设置,并且不会换行(用于重置终端的字体颜色、背景色和文本样式等设置)
echo -e "\e[0m\c"
# shellcheck disable=SC2016
# 脚本在执行过程中遇到任何非零返回码的命令时立即退出
set -e
# 下载域
readonly DOWNLOAD_DOMAIN=https://gitea.whlug.cn/
# 下载保存路径
TMP_ROOT=/tmp/xunmi
# 读取系统架构和内核信息
readonly UNAME_M="$(uname -m)"
readonly UNAME_R="$(uname -r)"
WorldType="新世界"
# 加载系统信息
source /etc/os-release
readonly Release=$(echo "${ID}")
readonly ReleaseName=$(echo "${NAME}")
# 获取项目路径
ItemDir=$1
###############################################################################
# 终端配色 #
###############################################################################
# 颜色配置
readonly COLOUR_RESET='\e[0m'
readonly aCOLOUR=(
'\e[38;5;154m' # 0: 亮绿
'\e[1m' # 1: 白
'\e[90m' # 2: 灰
'\e[91m' # 3: 红
'\e[32m' # 4: 绿
'\e[33m' # 5: 黄
)
Show() {
if (($1 == 0)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} 成功 $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
elif (($1 == 1)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[3]} 失败 $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
exit 1
elif (($1 == 2)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[4]} 信息 $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
elif (($1 == 3)); then
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[5]} 通知 $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
fi
}
# 灰色信息(处理一些无关紧要的信息, 调用后在没有清除颜色之前会一直使用灰色输出)
GreyStart() {
echo -e "${aCOLOUR[2]}\c"
}
# 清除颜色(一般和灰色信息连用)
ColorReset() {
echo -e "$COLOUR_RESET\c"
}
###############################################################################
# 函数/方法 #
###############################################################################
# 检查文件是否存在
exist_file() {
if [ -e "$1" ]; then
return 0
else
return 1
fi
}
# 识别架构
Check_Arch() {
case $UNAME_M in
# *x86_64*)
# TARGET_ARCH="amd64"
# ;;
*loongarch64*)
TARGET_ARCH="loong64"
;;
*)
Show 1 "此模块仅支持 loong64 架构处理器暂不支持 $UNAME_M 架构"
exit 1
;;
esac
Show 2 "检测到 $TARGET_ARCH 架构"
}
# 检查发行版和世界信息
Check_Distribution() {
sType=2
notice=""
case $Release in
*arch*) ;;
*Loongnix*);;
*openwrt*)
Show 1 "暂不支持openwrt"
exit 1
;;
*)
sType=3
notice="我们尚未在此发行版上进行测试,默认使用新世界文件替换"
;;
esac
if [[ $UNAME_R =~ ^4.19.0-.+ ]]; then
WorldType="旧世界"
fi
Show ${sType} "检测到 ${ReleaseName} 发行版系统, 根据内核版本推断属于 -> ${WorldType} <- 系统 "
if [[ ${sType} == 1 ]]; then
select yn in "Yes" "No"; do
case $yn in
[yY][eE][sS] | [yY])
Show 0 "检查已忽略"
break
;;
[nN][oO] | [nN])
Show 1 "已退出安装"
exit 1
;;
esac
done < /dev/tty # < /dev/tty 用于从终端读取输入信息
fi
}
# 下载替换依赖
DownloadAndInstall() {
PACKAGES=(
"${DOWNLOAD_DOMAIN}public/JetBrains_jna/releases/download/1.0/libjnidispatch_${WorldType}.so"
"${DOWNLOAD_DOMAIN}public/JetBrains_pty4j/releases/download/1.0/libpty_${WorldType}.so"
"${DOWNLOAD_DOMAIN}public/JetBrains_fsnotifier/releases/download/1.0/fsnotifier_${WorldType}"
)
# 检测项目路径是否存在
exist_file $ItemDir/lib/jna/amd64 || Show 1 "未找到关键路径 '$ItemDir/lib/jna/amd64' 请使用最新版JetBrains"
rm -rf ${TMP_ROOT}
mkdir -p ${TMP_ROOT} || Show 1 "无法创建临时目录"
TmpDir=$(mktemp -d -p ${TMP_ROOT} || Show 1 "无法创建临时目录")
pushd "${TmpDir}"
for PACKAGE in "${PACKAGES[@]}"; do
Show 2 "下载 ${PACKAGE}..."
GreyStart
wget -t 3 -q --show-progress -c "${PACKAGE}" || Show 1 "无法下载程序包"
ColorReset
Show 0 "下载完成"
done
now=$(date +"%Y%m%d-%H%M%S")
exist_file $ItemDir/lib/jna/amd64 || Show 1 "未找到指定路径 $ItemDir"
Show 2 "开始文件替换"
GreyStart
mv -nv $ItemDir/lib/jna/amd64/libjnidispatch.so $ItemDir/lib/jna/amd64/libjnidispatch_x86_$now.so
cp -v $TmpDir/libjnidispatch_${WorldType}.so $ItemDir/lib/jna/amd64/libjnidispatch.so
mkdir -vp $ItemDir/lib/pty4j/linux/loongarch64
cp -v $TmpDir/libpty_${WorldType}.so $ItemDir/lib/pty4j/linux/loongarch64/libpty.so
cp -v $TmpDir/fsnotifier_${WorldType} ~/.config/JetBrains/fsnotifier
chmod -v 755 ~/.config/JetBrains/fsnotifier
echo "idea.filewatcher.executable.path=$(readlink -f ~/.config/JetBrains/fsnotifier)" >> $ItemDir/bin/idea.properties
ColorReset
Show 0 "文件替换完成"
}
###############################################################################
# 入口(main) #
###############################################################################
usage() {
cat <<-EOF
使用方法: "$0 <PATH>"
PATH: JetBrains软件解压路径
EOF
}
if [ $# -eq 0 ]; then
usage
Show 1 "该脚本需要至少一个参数!"
fi
# 检查架构
Check_Arch
# 检查发行版
Check_Distribution
# 下载替换依赖
DownloadAndInstall

View File

@ -1,12 +0,0 @@
#!/usr/bin/zsh
#####################################
# 用于快速配置旧世界的开发环境 #
# 支持的语言: #
# [ ] golang #
# [ ] rust #
# [ ] java #
# [ ] nodejs #
#####################################