My First Post
H1 H2 H3 H4 H5 H6 a b c left centre right small code block big code block bold italic deleted
H1 H2 H3 H4 H5 H6 a b c left centre right small code block big code block bold italic deleted
Zsh 配置完整指南:从零打造高效终端 本文档提供一套完整的 Zsh 配置方案,涵盖补全系统、历史搜索、语法高亮、自动建议及 Powerlevel10k 主题。所有步骤手动整合,不使用 Oh My Zsh 等框架,配置完全透明可控。 在线安装 你可以通过以下脚本进行在线安装: curl https://biaozyx.pages.dev/scripts/setup_zsh.sh | bash # 适用于大部分发行版 curl https://biaozyx.pages.dev/scripts/setup_zsh-alpine.sh | sh # 为 Alpine Linux 定制 致大陆用户: 由于大部分镜像站不复存在,建议科学上网使用。也欢迎告诉我新的镜像站至我的邮箱! 1. 前置准备 1.1 确认 Zsh 已安装 zsh --version 如果未安装: # Void Linux sudo xbps-install zsh # Debian/Ubuntu sudo apt install zsh # Arch Linux sudo pacman -S zsh # Fedora sudo dnf install zsh 1.2 设为默认 Shell chsh -s /usr/bin/zsh 重新登录后生效。 ...
前言 最近在折腾Duo S觉得上面bash一点颜色都没有,忒难看,于是开始自己动手美化bash,最终得到这篇文章的.bashrc文件,还请大家过目! 由于这不算一个项目,所以就不把老版本内容保留了。最新版代码就贴在博客,可以通过右侧导航栏快速移到那里! 效果展示 附 效果展示截图 n份 v3.0 路径折叠仿照fish,父目录为单字符缩写(隐藏目录为两个字符)。耗时变为复合型,将整条命令的时间记录(即上条提示符命令被执行到这个提示符出现的时间,精确度为1ms) v3.1 相较于v3.0,明显git功能更灵活,但也有些问题(如删除后没有反馈) 删除没有反馈是因为现在使用diff计数,不再使用本地缓存了,所以是正常现象!(但其实不联网也依旧能用) 此外,添加了分割线。 代码展示-v3.1 重要消息 ble.sh 不建议搭配使用,建议搭配thefuck,因为ble.sh篡改$PROMPT_COMMAND,导致计时功能不稳定。已用+=()确保不被覆盖,新增管道报错功能无法正常工作。已更改为更现代的powerline外观。 #!/bin/bash # ~/.bashrc # Version : 3.1 # Update-time : 2026-5-6 # Author : BiaoZyx # Email : BiaoZyx@outlook.com ##################################### # Commit : Add a line to devide the prompts, and update the git mod. # 加载全局配置 if [ -f /etc/bashrc ]; then . /etc/bashrc fi # 用户环境变量 if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]; then PATH="$HOME/.local/bin:$HOME/bin:$PATH" fi export PATH # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and functions if [ -d ~/.bashrc.d ]; then for rc in ~/.bashrc.d/*; do if [ -f "$rc" ]; then . "$rc" fi done fi unset rc # 在交互shell启用bash自动补全,建议安装`bash-completion`并启用 if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi ############################## 自定义 ############################## ## 变量 # 如果使用opkg,添加以下内容 #export PATH=$PATH:/opt/bin export PATH=~/.npm-global/bin:$PATH # ----- 备忘录 ----- if [ -f ~/文档/memo.xue ]; then # 自定义备忘录 - 示例 memo=$HOME/文档/memo.xue fi ## 别名 alias ls="ls --color -F" # 自定义`ls`,可自行删减 alias l="ls -lah" # 自定义`ls`,可自行删减 alias ll="ls -lh" # 自定义`ls`,可自行删减 alias ip='ip --color=auto' # `ip a`的彩色,很有必要 if [[ -z $memo ]]; then alias memo="echo 备忘录路径为空!请手动添加到~/.bashrc!" else if command -v lolcat &>/dev/null; then alias memo="lolcat $memo" else alias memo="cat $memo" fi fi #################################################################### # ============ 现代 Powerline 风格提示符 ============ # 颜色定义 R='\[\033[0m\]' # 重置 BL='\[\033[1;30m\]' # 黑体 R1='\[\033[1;31m\]' # 红色 G1='\[\033[1;32m\]' # 绿色 Y1='\[\033[1;33m\]' # 黄色 B1='\[\033[1;34m\]' # 蓝色 M1='\[\033[1;35m\]' # 紫色 C1='\[\033[1;36m\]' # 青色 W1='\[\033[1;37m\]' # 白色 # 背景色 BG_BLACK='\[\033[40m\]' BG_RED='\[\033[41m\]' BG_GREEN='\[\033[42m\]' BG_YELLOW='\[\033[43m\]' BG_BLUE='\[\033[44m\]' BG_MAGENTA='\[\033[45m\]' BG_CYAN='\[\033[46m\]' BG_WHITE='\[\033[47m\]' # 路径折叠 _collapse() { local pwd="$PWD" local home="$HOME" local size=${#home} [[ -z "$pwd" ]] && return if [[ "$pwd" == "/" ]]; then echo "/" return elif [[ "$pwd" == "$home" ]]; then echo "~" return fi # 替换 $HOME 为 ~ if [[ "$pwd" == "$home/"* ]]; then pwd="~${pwd:$size}" fi # 分割路径 local IFS="/" local elements=($pwd) local length=${#elements[@]} local start=0 # 如果路径以 / 开头,跳过第一个空元素 if [[ -z "${elements[0]}" ]]; then start=1 fi for ((i = start; i < length - 1; i++)); do local elem="${elements[$i]}" if [[ -n "$elem" ]]; then if [[ "$elem" == .* ]]; then # 隐藏文件夹(以 . 开头)显示前 2 个字符 elements[$i]="${elem:0:2}" else # 普通文件夹显示第 1 个字符 elements[$i]="${elem:0:1}" fi fi done # 重新组合路径 IFS="/" echo "${elements[*]}" } # Git 分支+状态 _git_info() { local b r="" s line b=$(git branch --show-current 2>/dev/null) || return # 一次命令获取所有信息 s=$(git status --porcelain=2 --branch 2>/dev/null) # 解析分支信息 local ahead=0 behind=0 ab="$R" local ab_line=$(echo "$s" | grep "^# branch\.ab") if [[ -n "$ab_line" ]]; then ahead=$(echo "$ab_line" | cut -d' ' -f3 | tr -d '+') behind=$(echo "$ab_line" | cut -d' ' -f4 | tr -d '-') fi # 统计文件 local staged=0 unstaged=0 untracked=0 conflicts=0 while IFS= read -r line; do [[ "$line" == "# "* ]] && continue case "$line" in "1 "*) staged=$((staged + 1)) ;; # 暂存区 "2 "*) unstaged=$((unstaged + 1)) ;; # 工作区修改 " D"*) unstaged=$((unstaged + 1)) ;; # 工作区删除 " D"????*) staged=$((staged + 1)) ;; # 暂存区删除 "u "*) conflicts=$((conflicts + 1));; # 冲突 "? "*) untracked=$((untracked + 1));; # 未跟踪 esac done <<< "$(echo "$s" | grep -v '^#')" # 构建状态字符串 if (( conflicts > 0 )); then r=" ✦${conflicts}" # 有冲突最优先 elif (( staged + unstaged + untracked == 0 )); then r=" ○" # 干净 else r=" ●" # 有修改 (( staged > 0 )) && r="$r +${staged}" (( unstaged > 0 )) && r="$r ~${unstaged}" (( untracked > 0 )) && r="$r …${untracked}" # 未跟踪文件 fi # 分支名 + 状态 local branch_info=" ${b}${r}" # 远程同步状态 if (( ahead > 0 )); then branch_info="$branch_info ↑${ahead}" fi if (( behind > 0 )); then branch_info="$branch_info ↓${behind}" fi echo -n "$branch_info " } # 耗时格式化 _fmt_t() { local ms=$((($1 + 500000) / 1000000)) if ((ms < 1000)); then printf "%dms" $ms elif ((ms < 60000)); then printf "%d.%01ds" $((ms / 1000)) $(((ms % 1000) / 100)) elif ((ms < 3600000)); then printf "%dm%02ds" $((ms / 60000)) $(((ms % 60000) / 1000)) else printf "%dh%02dm" $((ms / 3600000)) $(((ms % 3600000) / 60000)) fi } # 计时 __ts="" trap '__ps=("${PIPESTATUS[@]}"); [[ -z "$__ts" ]] && __ts=$(date +%s%N)' DEBUG # 根用户检测 __is_root() { [[ $(id -u) -eq 0 ]] && echo 1; } # ====== 核心:构建 Powerline 提示符 ====== _powerline_prompt() { local ec=$? local now=$(date +%s%N) # 耗时 local t="" if [[ -n "$__ts" ]]; then t=$(_fmt_t $((now - __ts))) __ts="" fi # Git local git="$(_git_info)" # 状态图标(支持管道状态) local st_icon="" local st_bg="${BG_GREEN}" local st_fg="${BL}" local st_arr_fg="${G1}" if ((ec != 0)); then # 检查管道状态 if [[ -n "${__ps[*]}" && ${#__ps[@]} -gt 1 ]]; then local pipe_info=$( IFS='|' echo "${__ps[*]}" ) st_icon=" ✕${pipe_info}" else st_icon=" ✕${ec}" fi st_bg="${BG_RED}" st_fg="${W1}" st_arr_fg="${R1}" fi # === 拼装 Powerline 全箭头 === # 段1: 用户@主机 (青色底+黑字) → 箭头进入蓝色 local s1="${BG_CYAN}${BL} \u@\h ${R}${C1}${BG_BLUE}" # 段2: 路径 (蓝色底+白字) local s2="${BG_BLUE}${W1} $(_collapse) ${R}" # 段3: Git部分 / 直接跳到耗时 local s3="" if [[ -n "$git" ]]; then # 有git:蓝色箭头进入黄色 → git文字 → 黄色箭头进入状态色 s2+="${BG_BLACK}${B1}${BG_YELLOW}" s3="${BG_YELLOW}${BL}${git}${R}${BG_BLACK}${Y1}${st_bg}" else # 没git:蓝色箭头直接进入状态色 s3="${BG_BLACK}${B1}${st_bg}" fi # 段4: 耗时+状态图标 → 末端箭头 local s4="${st_bg}${st_fg}${st_icon} ${t} ${R}${st_arr_fg}" __last_time=$now # 最终单行 #PS1="\[\n\]${s1}${s2}${s3}${s4} ${R}" PS1="${R}\[\033[1;30m\]───${R}\n${s1}${s2}${s3}${s4} ${R}" } PROMPT_COMMAND+=(_powerline_prompt) # =========================== 欢迎界面 ============================== if [[ -e /usr/bin/figlet ]]; then figlet_lock_file="/tmp/figlet_lock_$$" # 使用 $$ 作为文件名的一部分,确保每个进程都有自己的锁文件 # 检查锁文件是否存在 if [ ! -f "$figlet_lock_file" ]; then # 创建锁文件并执行 figlet touch "$figlet_lock_file" echo " _ _ _ /\\_/\\ | | | (_) (o.o) | |_| | |_ > ^ < . | _ | ( ) / \\ . |_| |_|_|/ " figlet "$USER! " fi fi trap 'rm -f "$figlet_lock_file"' EXIT TERM # 用钩子,等退出删除锁文件 更新日志 - 重要,会发布已知BUG! v1 这个是原本给Buildroot用的,详见Milk-V Duo S | 使用报告 ...
一、初识 盼啊盼,终于盼来了这块Milk-V Duo S。先看一下Duo S的包装。(图1) 图1 可以看到,外圈有一层塑料外壳,并且材质很好,摸起来很顺滑。而用普通Milk-V Duo比较,就没有这种待遇了。 再来看看板子的结构,(图2.1为Duo S,图2.2为Duo) 图2.1 图2.2 可以看到,Duo S最显眼的地方就是新增的: 4排GPIO引脚(52针),并且上面那2排附有色彩标签; 1个WiFi 6天线; 1个USB 2.0接口; 1个RJ45网口 1个更大的摄像头接口 对比下来,Duo S的功能真的升级了不少,并且性能也升级了不少,就不详细提了。 官网教程很多,有专门提供的博客,后期折腾就根据官网教程走。 二、初始 初识过后,就应该初始化了(标题还挺押韵)。根据官网的教程,首先,我准备了一张32GB的Kingston的MicroSD卡和一个绿联的USB 3.0读卡器。(如图3) 图3 接着,我需要准备一个烧录工具。由于现在我使用的是Linux,所以我本来选择的是balenaEtcher。 我在官网下载.zip压缩包,下载速度很慢,只有大概10KB/s,提示要下4小时,慢的没边,于是“走捷径”,使用树莓派烧录器进行尝试烧录(我用的是Ubuntu,使用sudo apt install rpi-imager即可安装)。 如果你想体验新架构,那么烧录以下镜像链接里的milkv-duos-musl-riscv64-sd_v2.0.1.img.zip镜像即可。(官网文档链接如图4) 图4 但如果你想现在生态更磅礴一点的arm架构遨游,那么你可以选择milkv-duos-glibc-arm64-sd_v2.0.1.img.zip。 好了,现在,打开树莓派镜像烧录器,然后“Raspberry Pi Device”选择“No filtering”;接着操作系统选择“Use custom”,再选择你刚从Github下载好的镜像;再把SD卡选择好,注意磁盘选择是否正确;最后编辑设置等,最后烧录。注意,为了保证稳定,设置最好全部取消勾选,或者选“不”取消应用设置! 烧录完成过后,卸下读卡器和SD卡并装载进Duo S,注意将反面按钮选择至正确的架构!(按钮如图5左上角金色螺钉孔右边小开关,左边是ARM,右边是RISC-V,最好仔细观察开关下PCB上文字!) 图5,不小心拍竖过来了,最右边是正上方! 这里我用的是ARM架构,所以会将它移到左边。 装载完成,使用5V电源线将其连接至适配器/电脑,蓝灯应该闪烁。 三、网络 然后我们配置网络,引用一段官网的文本: 为了使用 USB 网络,我们在系统上默认启用了 CDC-NCM 和 DHCP。 提示 V1.1.2 之前的固件使用的 USB 网络是 RNDIS,如果您使用的是旧的版本,请更新到 V1.1.2 或更新的系统镜像。 CDC-NCM 在 Linux,macOS,以及最新的 Windows 系统上都免驱的,您可以直接使用 ssh root@192.168.42.1 登陆到 Duo 的终端。 我们直接打开终端输入:ssh root@192.168.42.1即可连接上Duo S,前提是你要把它接上电脑。 ...
公式 猜数字需要使用常见 “二分法” 来进行计算估算,最终算得公式如下: $$ 中间数 = (最大数-最小数+1)÷2+最小数 $$ 根据这个公式,如果 计算无误 ,那么通常一局游戏最多只需7轮。 以下是一场示例游戏! 示例游戏 第一轮 目前范围:1~100 根据公式计算中间数 $$ (100-1+1)÷2 =100÷2 =50 $$ 输入50 提示:小了 第二轮 第二轮先排除1~50,因为小了 目前范围:51~100 根据公式计算中间数 $$ (100-51+1)÷2+50 =50÷2+50 =25+50 =75 $$ 输入75 提示:大了 第三轮 排除:75~100 范围:51~74 根据公式计算: $$ (74-51+1)÷2+51 =(74-50)÷2+51 =24÷2+51 =12+51 =63 $$ 输入63 提示:小了 第四轮 排除:1~63 范围:64~74 根据公式计算: $$ (74-63+1)÷2+64 =(11+1)÷2+64 =12÷2+64 =6+64 =70 $$ 输入70 提示:小了 第五轮 排除:1~70 范围:71~74 根据公式计算: $$ (74-71+1)÷2+70 =(3+1)÷2+70 =4÷2+70 =2+70 =72 $$ 输入72 ...
Markdown 完全指南 基础语法规范 标题层级演示 # H1主标题 ## H2副标题 ### H3节标题 #### H4子标题 ##### H5特殊注释标题 ###### H6超小标题(部分工具会忽略渲染) 我还整理了一张表格,如下: Markdown 语法 名称 HTML 标签 典型用途 # 一级标题 <h1> 文档主标题(通常唯一) ## 二级标题 <h2> 章节标题 ### 三级标题 <h3> 子章节标题 #### 四级标题 <h4> 子段落标题 ##### 五级标题 <h5> 特殊注释标题 ###### 六级标题 <h6> 极小文字标题 效果展示: H1主标题 H2副标题 H3节标题 H4子标题 H5特殊注释标题 H6超小标题(部分工具会忽略渲染) Tips:不同博客主题的标题可能字体会不一样(渲染不同) 文本样式模板 **加粗文字** *斜体文字* ~~删除线文字~~ `行内代码` 效果展示: 加粗文字 斜体文字 删除线文字 行内代码 高级语法应用 代码块 ```文件类型 代码内容 ``` 示例代码: ```python print("Hello, world!") ``` 展示效果: print("Hello, world!") 数据表格示例 | 设备类型 | 市场价格 | 库存量 | |-----------|:---------:|-------:| | 智能手机 | ¥2999 | 120 | | 平板电脑 | ¥4599 | 75 | 效果展示: 设备类型 市场价格 库存量 智能手机 ¥2999 120 平板电脑 ¥4599 75 文档结构规范 --- <!-- 分割线语法 --> > 注释说明块 [通用链接](https://example.com)  操作提示: ...
序言 本文将会介绍“GUI猜数字”这款原创软件的界面、功能、编译等。详见后文~ 下载地址 开始前先晾出下载地址: https://biaozyx.lanzouq.com/b00ya27v2d (提取码:guiGN) 内容展示 所含文件 GuessNumber.exe(Windows可执行程序) GuessNumber.py(源代码,可用后面教程编译) highscores.json(高分榜数据储存的文件,不要随意改变,否则程序会重置数据) 主程序界面 游戏成功 游戏失败 帮助文本 编译 好了,下面该讲讲怎么编译了。如果你会,可以跳过。如果你用的是Windows也可跳过。 这里以Ubuntu/Debian作为示例 安装Python及pip 首先,你得有Python。 sudo apt install python3 其次,是pip(Python库安装工具,可能自带)。 sudo apt install pip3 然后安装编译工具——pyinstaller pip install pyinstaller 编译 pyinstaller --onefile GuessNumber.py #这里可以把"GuessNumber.py"换成任意.py文件 有时,pip不能用,就得用到pipx。 安装pipx sudo apt install pipx 安装完后,跟上面一样的编译方式。 安装编译工具 pipx install pyinstaller 这个过程可能久一点。 编译 pyinstaller --onefile GuessNumber.py #这里可以把"GuessNumber.py"换成任意.py文件 这样应该就行了。 (本章完)