Chrome浏览器
划选链接并快速跳转访问
原来的我们 需要划选链接
Ctrl+V复制, 然后打开新窗口 在地址栏上使用Ctrl+V填入复制的地址, 最后回车访问, 实在是太繁琐而现在只需要划选链接
Ctrl+V复制, 然后快捷键Ctrl+L聚焦地址栏, 紧接着Ctrl+V粘贴, 最后Alt+Enter, 即可直接跳转到新标签页访问, 是不是快了0.03秒😂没有操作 只有骚, 哈哈
本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 码出一个新世界
Astro是一个基于JavaScript的静态站点生成器, 和Hexo有点类似, 支持Markdown构建内容, 但Astro性能会更好, 它具有独特的岛屿架构,按需加载JS,能显著减少初始加载时间, 非常适合需要快速首屏加载的场景比如如博客、营销网站、企业官网等等
Astro官网: 点击进入
这里以MacOs平台为例:
安装npm
1 | brew install npm |
安装nodejs
这里指定nodejs版本为v18
1 | npm install -g n |
然后
1 | n v18 |
创建工程模板
1 | npm create astro@latest 工程名称 |

根据提示一步步往下走即可

完成后会在当前目录生成工程文件夹, 目录如下:

运行工程
1 | npm run dev |
开启调试, 此时在浏览器地址栏输入http://localhost:4321/即可实时访问

打包静态文件
工程编写完毕后, 即可输出网站静态文件
1 | npm run build |
执行完毕后, 在工程目录下会自动生成dist文件夹

将dist目录下的所有文件上传到你的静态服务器上就可访问了
Astro不仅可以和vue结合使用 还可以和React结合, 这里做一个简单Tailwind风格的网站演示
创建项目
1 | npm create astro@latest my-toolbox -- --template framework-react |
安装依赖
1 | cd my-toolbox |
初始化Tailwind
1 | npx tailwindcss init -p |
配置Tailwind.config.js
1 | export default { |
配置astro.config.mjs
1 | import { defineConfig } from 'astro/config'; |
编写主页
工作流页面
工具注册中心
以下是示例
1 | src/ |
本文为作者原创 转载时请注明出处 谢谢

之前用python从网络爬了一些引流文, 在使用hexo渲染时出现大批量的报错, 如下:
1 | {% raw %} |
该错误是由于Nunjucks模板引擎将文档中的双花括号{{}}误解析为模板语法导致的冲突
解决方案也很简单, 那就是在双花括号前后添加raw标签包裹, 如下:
1 | {% raw %}{{xxx}}{% endraw %} <!-- raw标签包裹 --> |
其目的是告诉Nunjucks将花括号当做普通文本来显示
如果只是一两处修改还好, 问题是大量的文章存在这样的问题, 手动一一修改肯定不现实
要不写一个python脚本自动替换一下?
可是可以, 没有办法的情况下只能这么干, 不过目前来说大可不必, 我们其实可以借助IDE的全局正则搜索替换功能, 比如vscode
打开替换面板 快捷键Ctrl+H (Windows/Linux) 或 Cmd+Option+F (macOS)
启用正则表达式模式 (点击.* 按钮或按 Alt+R)
搜索框输入:
1 | {% raw %} |
[^{}] 确保只匹配非花括号字符*? 非贪婪匹配任意数量字符替换框输入:
1 | `{% raw %}$1{% endraw %}` |
执行全部替换

优化点说明:
[^{}]确保不会错误匹配{{a{b}c}}这类嵌套结构*?比.更安全,避免过度匹配$1会保持原变量的大小写和特殊字符特殊场景处理:
[\s\S]*?(?<!prefix)\{\{除了双花括号之外, 还有类似的字符也需要进行替换, 不然hexo渲染也会报错, 下面列举一些常见的需要去除或者替换的字符
hexo标题不允许出现以下字符:
1 | : |
hexo内容需要进行替换的字符:
1 | {% raw %} 这个忽略 |
对于{% xxx %}的替换, 可以使用以下搜索正则表达式:
1 | \{%(?!(?:\s*raw\s|\s*endraw\s))([^%]+)%\} |
替换内容:
1 | {% raw %}{%$1%}{% endraw %} |
说明:
(?:)非捕获组同时排除raw和endraw标签\s*允许标签内可能存在的空格
提示标签未闭合
1 | Template render error: (unknown path) |
往往是因为出现了类似于{#xxx}的语法, 正确写法应该是{#xxx#}
如果数量比较多 可以使用正则搜索替换:
\]+)\} 如果碰上更复杂情况, 比如{#user,#user}, 也是会报错的, 这时我们可以使用增强表达式:
1 | (?:^|(?<!\{% raw %\}))\{#([^#]*(?:#(?!\})[^#]*)*)\}(?!\s*\{% endraw %\}) |
替换成:
1 | {% raw %}{#$1}{% endraw %} |
提示unexpected token
1 | {% raw %} |
问题处在未闭合的{{
解决方案就是使用raw标签对花括号进行包裹
如果数量比较多, 则依然使用正则全局替换, 在搜索框中输入以下正则表达式:
1 | \{\{(?!(?:[^{}]*}})) |
然后在替换框中输入:
1 | {% raw %}{{{% endraw %} |
表达式解释:
\{\{- 匹配 {{字面量(转义特殊字符)(?!(?:[^{}]*}}))- 负向先行断言,确保后面没有 }}闭合标签(?:[^{}]*}})- 匹配任意非 {}字符后跟 }}?!- 表示后面不能跟着这个模式这个正则表达式只会匹配未闭合的 {{ 标签,而不会匹配已闭合的 {{...}} 标签。
根据上面的探讨, 我们来做一个整合
按照以下步骤依次替换 能解决90%以上的问题, 剩下的手动改一下即可:
第一步 替换带引号的{% xxx %}
1 | `\{%(?!(?:\s*raw\s|\s*endraw\s))([^%]+)%\}` |
替换:
1 | `{% raw %}{#$1}{% endraw %}` |
第二步 替换带引号{{和}}
搜索:
1 | `\{\{` |
替换:
1 | `{% raw %}{{{% endraw %}` |
第三步 替换带引号{{xxx}}
搜索:
1 | `(\{\{+.*?\}\}+)` |
替换:
1 | `{% raw %}$1{% endraw %}` |
第四步 替换{#xxx}
搜索:
1 | (?:^|(?<!\{% raw %\}))\{#([^#]*(?:#(?!\})[^#]*)*)\}(?!\s*\{% endraw %\}) |
替换:
1 | {% raw %}{#$1}{% endraw %} |
第五步 替换不带引号的{{xxx}}
由于没有引号限制, 覆盖的范围会更广, 包括代码和注释
搜索:
1 | (\{\{+.*?\}\}+) |
替换:
1 | {% raw %}$1{% endraw %} |
第六步 替换不带引号{% xxx %}
搜索:
1 | \{%(?!(?:\s*raw\s|\s*endraw\s))([^%]+)%\} |
替换:
1 | {% raw %}{#$1}{% endraw %} |
前三步可以放心大胆替换, 后面几步按需替换, 因为有些代码里面的花括号可以保留
如果你想省事, 以牺牲文章部分内容和格式的前提下, 还有一种简单粗暴且有效的方法
那就是把整篇文章进行raw标签包裹, 也就是文章开头加一个raw标签, 文章结尾加一个endraw标签
本文为作者原创 转载时请注明出处 谢谢

先看看我的操作步骤
第一步 使用git init创键本地仓库
第二步 使用git submodule add -b master xxx添加子模块
第三步 手动删除了该子模块
此时.git目录下文件依然存在
第四步 使用git commit提交并使用git push推送到远程仓库
这时, 需求来了 我想恢复子模块, 该如何操作?
假如我先进行commit再删除, 那么我直接使用git submodule update --init --recursive就能立马从.git本地仓库中检出恢复
可偏偏我是先删除后 再进行commit, 远程仓库肯定是不包含子模块的, 这时该怎么办呢?
不用担心, 只要.git仓库中依然占用了存储空间, 意味着本地仓库还存在之前添加的子模块代码, 那我们就能从里面抓出来
只需要换个指令即可 如下:
1 | git submodule add -b master -f git@github.com:xxx.git |
这个命令不是从远程仓库重新拉取代码, 而是优先从本地检出, 无论文件删除是在commit前还是后都可用, 关键一定要加上-f, 否则没有效果
本文为作者原创 转载时请注明出处 谢谢

子工程数量太多, 挨个clone实在有些慢, 于是乎我写了一个自动化脚本, 如下:
1 | # 循环添加子模块 |
可问题来了, 每拉取一个仓库都需要手动输入ssh密钥密码, 实在有些繁琐, 该如何解决呢?
将密钥添加到ssh-agent中,执行以下指令:
1 | ssh-add ~/.ssh/id_rsa |
默认密钥名称为id_rsa, 如果你有自定义的名称, 进行对应修改即可
使用第三方工具, 这里以Mac为例, 使用sshpass工具来实现, 具体操作如下:
安装sshpass包
1 | brew install hudochenkov/sshpass/sshpass |
修改自动化脚本
在脚本中添加export SSHPASS代码, 如下:
1 | export SSHPASS="这里填ssh密码" |
该方案由于是明文存储密码, 所以安全性自然差一些
在生成ssh密钥时, 不设置密码, 直接回车即可
也就是说单独生成一个无需密码的新ssh密钥来使用
使用自动化部署的时候, 我通常会这么干
本文为作者原创 转载时请注明出处 谢谢

网上关于如何以U盘为媒介制作Win系统安装引导盘的教程很多, 但是大部分都是基于Windows平台的, 比如《优启通-如何使用U盘给电脑重新安装系统》
这个优启通软件是exe程序, 只支持Windows系统, 虽然我们可以在Mac平台上通过CrossOver工具来运行该程序, 但是写入时报错:


此外我还尝试了在Mac上使用Boot Camp ISO Converter工具来制作启动盘, 但是它只支持ISO格式的系统文件:


如果你的刚好是ISO格式, 那么可以直接使用该工具制作启动盘, 详细的教程可以查看知乎教程:
那如果是GHO格式的系统呢, 该如何在Mac上制作相应的启动盘呢
GHO格式的系统备份文件, 一般用于系统还原, 在Windows还能正常使用的时候,可使用还原工具进行一键还原, 如果原先系统无法使用, 那么需要借助PE系统来进行还原

PE系统本身通常也是一个ISO镜像文件, 在Windows上我们借助优启通等工具可以快速将PE系统刻录到U盘中
由于在Mac中, 这类型工具不多, 我们只好通过原始的流程来进行, 也就是手动下载PE系统的ISO镜像, 然后将其刻录到U盘中
详细的操作方法如下
下载Win系统GHO镜像
这里以Win10为例:

下载Win系统PE镜像
由于我选择的是Win10系统, 所以这里的PE镜像也需要选择支持Win10的

将U盘格式化为FAT32
可以使用Mac自带的磁盘格式化功能, 进入实用工具-->磁盘工具:

或者使用命令行:
1 | diskutil eraseDisk FAT32 "格式化后U盘名称" MBR 需要进行格式化的U盘标识名称 |
关于U盘的标识, 可以使用以下指令查看:
1 | diskutil list |

下载镜像刻录工具
balenaEtcher 是一个免费开源且跨平台的镜像刻录工具, 支持Windows、Linux、Mac平台

官网 : 点击进入
GitHub : 点击进入
如果官网下载比较慢, 可以使用国内网盘下载:

将PE镜像通过balenaEtcher刻录到U盘中


如果你懒得下载软件, 也可以使用命令行工具进行拷贝, 首先双击iso文件进行挂载, 然后使用cp指令进行复制, 如下:
1 | cp -R -P /Volumes/iso挂载名称/* /Volumes/U盘名称/ |
刻录完成后将GHO镜像拷贝到U盘中
如果GHO镜像过大, 无法拷贝, 可以考虑将U盘格式化为NTFS
这里推荐大家使用omi NTFS磁盘专家进行格式化:

即将刻录好的U盘插入需要装机的电脑中进行系统引导安装
不同的主板启动键不一样, 可以查看以下表格:

本文为作者原创 转载时请注明出处 谢谢

在终端中执行git log指令时, 出现中文无法完全的显示的问题, 如下:

这个问题通常是因为Git的日志输出包含了非ASCII字符,而终端或者控制台的字符编码设置不正确导致的
只需将终端或控制台的字符编码设置为UTF-8
对于Windows系统,可以在终端窗口中通过右键点击标题栏 -> 属性 -> 字体 -> 高级,然后设置字符编码为UTF-8
对于Linux或Mac系统,可以在终端设置中查找相关选项,或者直接在终端中输入以下命令来设置字符编码:
1 | export LC_ALL=en_US.UTF-8 |
最后效果如下:

本文为作者原创 转载时请注明出处 谢谢

python开源库rembg,让你轻松实现去除图片背景的效果。
| 原图 | 去除背景之后 |
|---|---|
![]() |
![]() |
1 | input = Image.open(input_path) # 打开原图 |
需要 python 版本 >3.7, <3.12 安装依赖,同时支持源码调用和命令行调用,使用时按需求安装
1 | pip install rembg # 编码使用 |
1 | pip install rembg[gpu] # 编码使用 |
第一次运行会先下载预训练的模型,下面有模型的下载地址
1 | rembg i path/to/input.png path/to/output.png |
1 | rembg i -m u2netp path/to/input.png path/to/output.png |
1 | rembg i -om path/to/input.png path/to/output.png |
只保留蒙版效果

1 | rembg p path/to/input path/to/output |
会启用一个服务,然后前端可以通过接口访问,默认的接口地址 http://localhost:5000/api
1 | rembg s |
运行效果
| UI效果 | API地址 |
|---|---|
![]() |
![]() |
1 | from rembg import remove |
PIL 打开图片1 | from rembg import remove |
opencv 打开图片1 | from rembg import remove |
1 | from rembg import new_session, remove |
分割保留人物效果,模型 u2net_human_seg
| 原图 | 去除背景并分割人物 |
|---|---|
![]() |
![]() |
其他高级模式请自行探索 源码地址 rembg
第一次运行会先下载预训练的模型,默认从 github 下载,在国内可能无法从 github 下载,这里提供一个 网盘的下载地址 模型-国内网盘下载,下载之后放在 C:\Users\用户名\.u2net\ 目录下
这些不需要全部下载,可以只下载其中一个,默认需要的模型是 u2net,其他的模型根据需求有选择的下载

可以使用的模型有
本文转载自: 掘金

关于如何将静态网页中的html、图片、样式表和JavaScript文件下载到本地
有以下几种方案
假设你要下载的静态网站链接为https://baidu.com,可以使用以下命令来下载:
1 | wget --recursive --no-clobber --page-requisites --html-extension --convert-links http://example.com |
参数解释:
--recursive:递归下载,将链接的页面上的链接一并下载--no-clobber:不重复下载已下载过的文件--page-requisites:下载页面的所有资源,包括图片、样式表和 JavaScript 文件--html-extension:将所有的页面文件的后缀名设置为.html--convert-links:将页面引用的链接转换为本地路径wget 会将整个网站下载到当前目录下的一个名为 example.com 的文件夹中使用wget下载的方式可以将整站的静态网页和相对路径资源打包下载到本地 有点类似于整站克隆
有些网站的页面需要进行登录后才能正常显示 如果我们要实现保持登录状态进行页面的下载 那么就需要使用cookies
首先 我们需要登录获取cookies 然后保存在本地文本中:
1 | wget --save-cookies=cookies.txt --keep-session-cookies --post-data 'username=your_username&password=your_password&other_field=value' https://yourwebsite.com/login |
这里的表单信息需要替换成目标网站的值
cookies.txt内容格式如下:
1 | # HTTP Cookie File |
有了cookies后 接下来使用--load-cookies进行下载
1 | wget --load-cookies=cookies.txt --keep-session-cookies --recursive --no-clobber --page-requisites --html-extension --convert-links https://example.com |
假如用户登录并不是以表单的形式 可能是第三方登录 或者PHP网站 那么我们可以借助python中的selenium来模拟浏览器登录获取cookies
python3代码如下:
1 |
|
或者使用chrome插件获取并导出cookies 该插件名为Get cookies.txt Clean

Save All Resources : 该扩展程序可一键下载所有资源文件并保留文件夹结构
插件安装后 打开开发者界面ResourcesSaver选项卡即可根据自己的需求进行资源下载:

注意: 这个插件只能下载当前页面的Html页面和相关资源
本文为作者原创 转载时请注明出处 谢谢

Mac平台默认启动终端的方式有些繁琐
为了减少大脑压力 简化实现流程 我们可以使用自定义脚本的方式 快速在当前目录下启动某个应用
但是单纯使用sh脚本话 依然有些繁琐 因为免不了需要手动输入执行指令 不过好在Mac中Finder给我们提供的添加自定义菜单的功能:

我们只需将编写好的.sh脚本文件拖入到窗口菜单面板中 然后默认使用第三方终端打开脚本 那么当我们点击图标的时候 就能快速执行脚本内容了
至于如何将脚本文件拖入到面板中 只需按住command键即可 如果你想移除它 也是同样的操作
下面列出了一些常用的脚本 大家可以依葫芦画瓢 自行发挥
一键打开终端,并切换到当前目录
1 | #!/bin/bash |
一键打开 vscode,并加载当前目录
1 | #!/bin/bash |
一键登录服务器
1 | #! /usr/bin/expect |
一键启动静态服务器,并加载当前目录
1 | #!/bin/bash |
创建指定的目录结构
比如这种:
1 | new_directory |
实现指令如下:
1 | #!/bin/bash |
如果我们想给脚本添加上对应的图标 比如将启动vscode的脚本换成vscode应用的图标 那么我们可以:
vscode应用右键拷贝 (不是复制) command+v粘贴即可如果你想使用Mac自带的终端启动该脚本 只需将后缀.sh改成.command即可
如果出现权限问题 需要手动修改权限

执行以下命令修改脚本访问权限:
1 | chmod 777 xxx.command |
当应用启动后 终端窗口未关闭

这种情况 我们需要去终端偏好设置中进行相关设置 将关闭是否询问改为永不 当shell退出窗口时关闭终端:


本文为作者原创 转载时请注明出处 谢谢
