煮字为药

欢迎来到我的博客!

Linux Man Page 汉化教程

本文档介绍如何将 man 手册页翻译成中文。

原理

Linux 的 man 手册页存储在 /usr/share/man/ 目录下,按语言分类:

  • man1/ - 程序手册
  • man5/ - 文件格式手册
  • 等等
    中文手册放在 zh_CN 子目录下,例如:
  • /usr/share/man/zh_CN/man1/ - 中文程序手册

以 fish 为例汉化

步骤 1:查找原手册位置

1
2
man -w fish
# 输出: /usr/share/man/man1/fish.1.gz

步骤 2:解压手册文件

1
2
3
4
# 解压 .gz 文件
gunzip /usr/share/man/man1/fish.1.gz
# 或者不解压直接读取内容
gunzip -c /usr/share/man/man1/fish.1.gz > /tmp/fish.1

步骤 3:翻译内容

man 手册使用 roff/troff 格式,主要命令:

命令 说明
.TH 标题
.SH 章节标题(NAME, SYNOPSIS, DESCRIPTION 等)
.TP 缩进段落
.nf / .fi 无格式 / 恢复格式
\fB 粗体
\fI 斜体
翻译时保留格式标记,只翻译文字内容。

步骤 4:创建中文手册目录

1
sudo mkdir -p /usr/share/man/zh_CN/man1

步骤 5:安装中文手册

1
2
3
4
5
6
# 移动翻译好的文件
sudo cp fish_zh.1 /usr/share/man/zh_CN/man1/fish.1
# 压缩(可选,man 会自动处理)
sudo gzip /usr/share/man/zh_CN/man1/fish.1
# 更新 man 数据库
sudo mandb

步骤 6:查看中文手册

1
2
3
4
5
6
# 临时指定语言
man -L zh_CN fish
# 设置默认语言(添加到 ~/.bashrc 或 ~/.zshrc)
export MANOPT="-L zh_CN"
# 查看中文手册
man fish

常用命令

1
2
3
4
5
6
7
8
# 查看手册所属包
pacman -Qo /usr/share/man/man1/fish.1.gz # Arch
dpkg -S /usr/share/man/man1/fish.1.gz # Debian/Ubuntu
rpm -qf /usr/share/man/man1/fish.1.gz # RHEL/CentOS
# 列出所有 fish 相关手册
ls /usr/share/man/man1/*fish*
# 查看中文手册目录
ls /usr/share/man/zh_CN/man1/

注意事项

  1. 软件更新:软件更新后手册会被覆盖,需要重新翻译
  2. 权限:安装到系统目录需要 sudo 权限
  3. 备用方案:可以放到用户目录,但需要手动指定路径
  4. 格式保留:翻译时务必保留 roff 格式标记,否则无法正常显示

故障排除

1
2
3
4
5
6
7
8
# 手动刷新 man 数据库
sudo mandb
# 清除 man 缓存
sudo rm -rf /var/cache/man/*
# 指定手册路径
MANPATH=/usr/share/man/zh_CN:$MANPATH man fish
# 查看所有可用语言
locale -a | grep zh

相关文件

  • 已翻译的 fish 手册: /tmp/fish_zh.1

注意

  • <leader> (前缀键) 默认为 空格键 (<Space>)
  • <localleader> 默认为 反斜杠 (\)
  • 模式说明n=普通模式, i=插入模式, v/x=可视模式, t=终端模式。

1. 通用操作 (General)

最常用的基础操作,包括窗口移动、保存、注释等。

快捷键 功能描述 模式
j / k 向下 / 向上移动 n, x
<C-h/j/k/l> 将光标切换到 左/下/上/右 窗口 n
<C-Up/Down/Left/Right> 调整窗口大小 (高/宽) n
<A-j> / <A-k> 向下 / 向上移动当前行 (代码搬移) n, i, v
<S-h> / <S-l> 上一个 / 下一个 Buffer (缓冲区) n
[b / ]b 上一个 / 下一个 Buffer n
<leader>bb 切换到最近的另一个 Buffer n
<leader>bd 删除当前 Buffer n
<leader>bo 删除其他 Buffer (只留当前) n
<C-s> 保存文件 n, i, v
<esc> 退出并清除搜索高亮 n, i
<leader>ur 强制重绘 / 清除高亮 / 更新 Diff n
gco / gcO 在 下方/上方 添加注释 n
<leader>l 打开 Lazy 插件管理器 n
<leader>fn 新建文件 n
<leader>qq 退出所有 (Quit All) n
<leader>wd 删除当前窗口 n
<leader>- / <leader>| 向下 / 向右 分割窗口 n

2. LSP (代码智能辅助)

基于语言服务器的代码跳转、重命名和诊断。

快捷键 功能描述 模式
gd 转到定义 (Goto Definition) n
gr 查看引用 (References) n
gI 转到实现 (Implementation) n
gy 转到类型定义 (Type Definition) n
K 查看文档悬停 (Hover) n
gK 查看函数签名帮助 n
<leader>ca 代码操作 (Code Action) n, v
<leader>cr 重命名 (Rename) n
<leader>cf 格式化代码 (Format) n, v
<leader>cd 查看当前行诊断信息 n
[d / ]d 上一个 / 下一个 诊断信息 n
[e / ]e 上一个 / 下一个 错误 n

3. 搜索与文件查找 (Snacks.nvim / Telescope)

LazyVim 新版主要使用 snacks.nvim 作为查找器。

快捷键 功能描述 模式
<leader><space> 查找文件 (Root Dir) n
<leader>ff 查找文件 (Root Dir) n
<leader>fF 查找文件 (当前目录 cwd) n
<leader>/ 全局搜索关键词 (Grep Root Dir) n
<leader>sg 全局搜索关键词 (Grep Root Dir) n
<leader>sb 搜索当前打开的 Buffer 内容 n
<leader>fr 最近打开的文件 (Recent) n
<leader>fb / <leader>, 切换 Buffer 列表 n
<leader>e 打开文件资源管理器 (Explorer) n
<leader>s" 搜索寄存器内容 n
<leader>sk 搜索快捷键映射 (Keymaps) n

4. Git 版本控制

快捷键 功能描述 模式
<leader>gg 打开 LazyGit (或 GitUI) n
<leader>gb 查看当前行 Blame 信息 n
<leader>gf 查看当前文件 Git 历史 n
<leader>gl 查看 Git Log n
<leader>gd 查看 Diff (Hunks) n
<leader>gs Git Status n

5. 界面开关 (UI Toggles)

<leader>u 开头,用于快速开启/关闭某些功能。

快捷键 功能描述
<leader>uf 开启/关闭 自动格式化 (Auto Format)
<leader>us 开启/关闭 拼写检查 (Spelling)
<leader>uw 开启/关闭 自动换行 (Wrap)
<leader>ul 开启/关闭 行号
<leader>uL 开启/关闭 相对行号
<leader>ud 开启/关闭 诊断信息 (Diagnostics)
<leader>uh 开启/关闭 内嵌提示 (Inlay Hints)
<leader>uz 开启/关闭 禅模式 (Zen Mode)

6. 常用插件功能

根据文件中列出的插件,整理出高频使用的功能。

Flash.nvim (快速跳转)

快捷键 功能
s 启动 Flash 快速跳转 (屏幕内搜索字符跳转)
S Flash Treesitter 跳转 (选中代码块)

Mini.surround (包围修改)

快捷键 功能 (示例)
gsa 添加 包围 (Add) - 例如 gsaiw" 给单词加引号
gsd 删除 包围 (Delete) - 例如 gsd" 删除引号
gsr 替换 包围 (Replace) - 例如 gsr"' 将双引号改为单引号

Trouble.nvim (问题面板)

快捷键 功能
<leader>xx 打开/关闭 诊断面板 (Diagnostics)
<leader>xX 打开/关闭 当前 Buffer 诊断面板
<leader>cs 查看 LSP 符号列表 (Symbols)

Yanky.nvim (剪贴板历史)

快捷键 功能
<leader>p 打开剪贴板历史记录
p / P 粘贴 (Put)
y 复制 (Yank)

Todo-comments (待办高亮)

快捷键 功能
<leader>st 搜索所有 Todo 注释
]t / [t 下一个 / 上一个 Todo

Grug-far (搜索替换)

快捷键 功能
<leader>sr 全局搜索并替换 (Search and Replace)

7. 调试 (DAP - Debug Adapter Protocol)

如果安装了调试相关的 Extra。

快捷键 功能
<leader>db 切换断点 (Toggle Breakpoint)
<leader>dc 继续运行 (Continue)
<leader>di 单步步入 (Step Into)
<leader>do 单步步出 (Step Out)
<leader>dO 单步跳过 (Step Over)
<leader>dt 终止调试 (Terminate)
<leader>du 打开调试界面 (Dap UI)

8. 测试 (Neotest)

快捷键 功能
<leader>tt 运行当前文件测试
<leader>tr 运行最近一次测试 (Run Nearest)
<leader>ts 查看测试概览 (Summary)
<leader>to 查看输出 (Output)

9. 终端 (Terminal)

快捷键 功能 模式
<leader>ft 打开浮动终端 (项目根目录) n
<leader>fT 打开浮动终端 (当前目录) n
<c-/> (Ctrl+/) 切换浮动终端 n, t

🚀 跨系统分区扩容实战指南:从 Windows 匀空间给 Arch Linux

第一部分:前期准备与 Windows 端操作

在动手术之前,请确保你已经完成了以下心理和技术准备。

0. 核心警告 (Vim 用户的严谨)

  • 数据无价:请将 ~/Myblog~/.config 等重要数据备份至外置 U 盘或云端。
  • 环境要求:笔记本必须接通电源,防止中途断电。
  • 工具准备:确保你的 Ventoy U 盘里有 GParted Live ISO(推荐)或最新的 Arch ISO

1. Windows 端的必要预处理

Windows 的一些特性会“锁定”磁盘,导致 Linux 无法移动分区。

  1. 彻底关闭 BitLocker
    • 进入 Windows 设置 -> 隐私与安全性 -> 设备加密。
    • 必须关闭并等待解密完成。如果磁盘是加密状态,GParted 将无法识别文件系统。
  2. 关闭“快速启动 (Fast Startup)”
    • 进入控制面板 -> 电源选项 -> 选择电源按钮的功能。
    • 取消勾选“启用快速启动”。(这能确保 Windows 彻底关机,释放磁盘挂载权)。
  3. 执行磁盘压缩
    • 右键“此电脑” -> 管理 -> 磁盘管理。
    • 右键点击 C 盘 (p3),选择 压缩卷
    • 输入你想给 Linux 的空间(例如:102400 MB,即 100G)。
    • 结果:C 盘右侧会出现一整块黑色的 “未分配空间”

第二部分:GParted Live “推箱子”接力

这是整个手术的核心。你需要利用 GParted 就像推箱子一样,把那块空地往右移动,直到它挨着 / 分区。

手术逻辑:

目前的格局:[Win] [空地] [p4:boot] [p5:swap] [p6:root]
我们的目标:[Win] [p4:boot] [p5:swap] [空地] [p6:root] -> 最终合并。

操作步骤:

  1. 启动 GParted
    • 重启电脑,通过 F12 (或你的快捷键) 进入 Ventoy,选择 GParted Live 启动。
  2. 移动 p4 (/boot)
    • 找到 nvme0n1p4。右键点击,选择 Resize/Move
    • 在弹出的窗口中,用鼠标拖动整个分区的“条状块”向左拉到底
    • 你会发现 [空地] 跑到了 p4 的右边。
  3. 移动 p5 (Swap)
    • 找到 nvme0n1p5。同样右键 Resize/Move
    • 将分区块整体向左拖动,贴住 p4。
    • 此时 [空地] 跑到了 p5 和 p6 (根目录) 之间。
  4. 真正扩容 p6 (/)
    • 找到 nvme0n1p6。右键 Resize/Move
    • 注意:这次不是移动整个块,而是按住该块的 左侧边缘,向左拉满,吃掉所有空地。
  5. 应用变更
    • 点击工具栏上方的 Apply All Operations (打钩图标)
    • 漫长的等待:GParted 会开始物理搬运数据。此时严禁强制关机

第三部分:引导修复与系统验证

完成 GParted 的物理搬运后,大概率可以直接进入系统。但由于你移动了 /boot 分区的起始物理扇区,GRUB 可能会暂时“找不到北”。

1. 如果无法启动(进入了 grub rescue)

不要惊慌,这是由于磁盘的物理索引改变导致的。请使用 Ventoy 启动进入 Arch ISO 环境:

  1. 挂载你的分区(按照你之前的 lsblk 布局):
    1
    2
    3
    4
    # 挂载根目录
    mount /dev/nvme0n1p6 /mnt
    # 挂载引导分区
    mount /dev/nvme0n1p4 /mnt/boot
  2. 进入 Chroot 环境(Arch 用户的常规操作):
    1
    arch-chroot /mnt
  3. 重刷 GRUB 配置(让它重新寻找内核位置):
    1
    2
    3
    4
    # 重新安装引导信息
    grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
    # 重新生成配置文件
    grub-mkconfig -o /boot/grub/grub.cfg
  4. 退出并重启
    1
    2
    exit
    reboot

2. 进入系统后的验证 (The Post-Op Check)

成功回到 Hyprland 后,第一件事是确认根分区是否真的变大了。

  1. 使用极客工具查看
    运行你喜欢的 gdu

    1
    gdu /
  2. 经典命令查看

    1
    df -h /

    此时你应该能看到 / 分区的容量已经从 40G 增长到了你设定的数值(例如 140G),且“可用空间”不再是红色的几百 MB。


3. 可能遇到的意外情况 (Troubleshooting)

情况 A:文件系统自检 (fsck)

  • 现象:开机时屏幕狂跳代码,显示 recovering journalclean, ... blocks
  • 对策:这是正常的。因为你改动了分区大小,内核会自动进行一次文件系统完整性自检,等它跑完即可。

情况 B:UUID 冲突或失效

  • 现象:启动时卡在 A start job is running for dev-disk-by...
  • 对策:如果你的 /etc/fstab 是基于 UUID 挂载的(Arch 默认如此),通常没问题。如果报错,请在 TTY 运行 blkid 查看新 UUID,并同步修改 /etc/fstab

情况 C:Windows 无法引导

  • 现象:GRUB 菜单里的 Windows 选项失效。
  • 对策:回到 Arch 终端,运行 sudo os-prober。如果能搜到 Windows,再运行 sudo grub-mkconfig -o /boot/grub/grub.cfg 即可。

🎙️ 结语:空间自由后的建议

现在你已经拥有了宽裕的根目录空间,建议:

  1. 定期清理:即便空间大了,也要养成 sudo pacman -Sc 清理缓存的习惯。
  2. 快照习惯:由于你还没有安装 Timeshift,既然现在空间够了,建议安装并创建一个备份,以后动磁盘前先打个快照。
  3. 独立数据盘:如果未来 Windows 依然有富余,可以考虑建立一个 exFAT 格式 的公共分区,让 Windows 和 Arch 共享大文件(如虚拟机镜像或视频素材)。

本文记录于 2026年1月,是一次成功的分区接力扩容实战记录。

祝你手术顺利,重启后看到满格的磁盘空间!

1. 背景:一个常见的 Hexo 部署“事故”

在 Arch Linux 上折腾 Hexo 博客是一件很爽的事情,但很多新手(PS: Me)都会遇到一个尴尬的情况:

  • 运行 hexo d 提示成功了。- 仓库里莫名其妙多了一个 gh-pages 分支。
  • 自己的自定义域名突然失效,或者显示的还是旧内容。
  • Cloudflare Pages 报错:Could not read package.json

这背后的本质原因在于:部署逻辑的混乱

2. 传统模式 vs 现代模式

在深入解决办法前,我们需要理解两种不同的部署逻辑:

传统模式:本地构建 (Local Build)

  • 流程:你在本地运行 hexo g(把 Markdown 转为 HTML),然后通过 hexo d 把这些 HTML 推送到 GitHub 的某个分支(通常是 gh-pages)。
  • 缺点
    • 容易忘记推送源码(master 分支),导致换台电脑就没法写博客。
    • 频繁覆盖远程分支,导致 CNAME 文件丢失,自定义域名失效。
    • 依赖本地环境(Node.js 版本、主题依赖等),环境一变就报错。

现代模式:云端构建 (CI/CD)

  • 流程:你只管把源码(.md 文件、配置文件)git push 到 GitHub。剩下的构建工作交给 Cloudflare Pages 或 GitHub Actions。
  • 优点
    • 源码即版本:仓库里存的是人能读懂的源码,而不是乱糟糟的 HTML。
    • 环境无关:不管你是在 Arch、Windows 还是手机上改代码,云端环境都是一致的。
    • 自动备份:只要提交代码,源码就自动备份到了 GitHub。

3. 避坑指南:从本地构建转向云端自动化

如果你也遇到了 gh-pages 分支冲突或者 Cloudflare 构建失败,建议按照以下步骤重构你的工作流:

第一步:统一分支

停止使用 hexo d。将你的 master 分支作为唯一的真理来源(Source of Truth),确保它包含了所有的源文件:

  • source/ 文件夹(你的文章)
  • themes/ 文件夹(你的主题)或者是/node_modules/hexo-theme-<theme-name>
  • _config.yml (Hexo 配置)
  • package.json (依赖配置)

通过自定义 cloudflare 脚本(位置:package.json/scripts:)并配合 --legacy-peer-deps 参数,我们可以解决不同环境下插件版本冲突的玄学问题,让 CI/CD 流程更加鲁棒。

第二步:配置 Cloudflare Pages 接管

不要让 Cloudflare 去监控 gh-pages 分支,因为它里面只有 HTML,没法运行命令。

  1. 在 Cloudflare 设置中,将 Production branch 设置为 master
  2. Framework preset 选择 Hexo
  3. Build command 设置为 npx hexo generatenpm install --legacy-peer-deps && npm run cloudflare(前提是在package.json中定义好script:cloudflare选项)。
  4. Build output directory 设置为 public

第三步:解决域名持久化

在本地 source/ 目录下创建一个 CNAME 文件,写上你的域名。这样无论云端如何构建,自定义域名永远不会丢失。

4. 延伸思考:为什么开发者应该追求自动化?

对于 Arch Linux 用户来说,我们习惯了高度定制和掌握底层逻辑。但在博客部署这件事上,**“无感化”**才是高级追求。

  1. 基础设施即代码 (IaC):你的博客不再是一堆网页,而是一个可以随时重新构建的项目。
  2. 解耦:将“内容创作”与“网页渲染”解耦。我只需要在 GitHub 网页版点一下“编辑”,剩下的渲染、部署、CDN 刷新全自动完成。
  3. 容灾:如果哪天我的 Arch 环境滚挂了(虽然概率很低),我的所有博客源码都在 GitHub 上,换台机器拉下来就能用,这才是真正的安全感。

5. 总结

删掉那个混乱的 gh-pages 分支吧!回归到最纯粹的 git push origin master

一句话工作流:

写文章 -> git push -> 关机睡觉 -> 博客自动更新。


推荐博客发布步骤(本篇博客为例):

  1. 新建文章hexo new "hexo-deployment-guide"
  2. 粘贴内容:将上面的 Markdown 内容贴进去。
  3. 发布源码
    1
    2
    3
    git add .
    git commit -m "feat: 迁移到 Cloudflare Pages 自动构建并添加避坑指南"
    git push origin master
  4. 检查结果:去 Cloudflare Pages 看看那个代表成功的绿色小勾。

环境声明:Arch Linux | Hyprland (JaKooLit) | Kitty | Zsh (agnosterzak) | Neovim

第一章:Zsh Vi-Mode

1. 核心状态切换

  • 插入模式 (Insert):默认状态,光标为 竖线 |,左侧显示 -- INSERT --。此时正常打字。
  • 退出到命令模式 (Normal):快速连按 jk 或按 ESC
    • 状态变化:光标变 方块 ,左侧变红显示 -- NORMAL --
  • 重回输入:在 Normal 模式下按 i (当前位置) 或 a (后移一格)。

2. Normal 模式

按下 jk 进入 Normal 模式:

  • 单词跳跃:按 w 跳到下个单词开头,按 b 回跳。
  • 首尾跳转:按 0 (零) 回行首,按 $ 到行尾。
  • 修改
    • x:删除当前光标下的字符。
    • dw:删除当前光标后的整个单词。
    • dd:清空当前整行命令。
  • 撤销:按 u 撤销刚才的删除。

3. 历史命令搜索

  • 上下翻找:进入模式后,直接按 k 向上翻,j 向下翻。
  • 高级过滤:先输入 git,再按 jk 进入模式按 k,它只会翻出你以前输入过的 git 相关命令。

4. v 编辑长命令

  • 场景:一个很长的脚本或带有复杂嵌套引号的 Shell 命令。
  • 操作:在 Normal 模式下按下 v
  • 效果:系统会进入 -- VISUAL-- 模式 。

第二章:Hyprland 窗口管理

1. 焦点切换 (Super + HJKL)

  • 场景:终端,文档同时打开。
  • 操作:按住 Super 不放,按 h 往左跳,按 l 往右跳。

2. 窗口位移 (Super + Ctrl + HJKL)

  • 场景:当你想把当前屏幕中间的终端移动到最左侧。
  • 操作Super + Ctrl + h。窗口会物理性地向左侧“平移”。

3. 丝滑缩放 (Super + Shift + HJKL)

  • 场景:觉得终端太窄,想拉宽一点。
  • 操作:按住 Super + Shift + hjkl

第三章:Kitty 历史回溯

1. 进入回溯模式

  • 按下 Alt + h

2. 复制屏幕上的报错信息

  • 场景:终端打印了一大堆报错,你需要复制其中一段。
  • 步骤
    1. Alt + h。此时整个终端变成了一个 Neovim 只读文件。
    2. hjkl 找到报错行,或者按 / 输入关键词搜索。
    3. v 进入视觉模式,选中文字。
    4. 按下 y
    5. q 退出。
  • 结果:内容已在你的系统剪切板,直接在浏览器里 Ctrl+v 即可。

第四章:Rofi 菜单

  • 启动:按 Super + Space (或你的 Rofi 键)。
  • 选择
    • 输入 brave
    • 向上/下:按住 Ctrl,点击 jk 进行挑选。
  • 确认:按下 Ctrl + mEnter 启动。


🛠️ 五、 核心配置汇总

1. Hyprland:系统级窗口管理

配置文件~/.config/hypr/UserConfigs/UserKeybinds.conf
将方向键逻辑 1:1 映射到 HJKL,利用 binde 实现丝滑缩放。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 移动窗口焦点 (Move Focus) -> Super + HJKL
bind = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d

# 调整窗口大小 (Resize Window) -> Super + Shift + HJKL
# binde 确保长按时连续缩放
binde = $mainMod SHIFT, H, resizeactive, -40 0
binde = $mainMod SHIFT, L, resizeactive, 40 0
binde = $mainMod SHIFT, K, resizeactive, 0 -40
binde = $mainMod SHIFT, J, resizeactive, 0 40

# 移动窗口物理位置 (Move Window) -> Super + Ctrl + HJKL
bind = $mainMod CTRL, H, movewindow, l
bind = $mainMod CTRL, L, movewindow, r
bind = $mainMod CTRL, K, movewindow, u
bind = $mainMod CTRL, J, movewindow, d

2. Zsh:高性能 Vi 模式

配置文件~/.zshrc
优化重点:解决了 agnosterzak 主题下猛按回车卡顿的问题,并实现了状态同步。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 启用 Vi 模式与 jk 映射
bindkey -v
export KEYTIMEOUT=15
bindkey -M viins 'jk' vi-cmd-mode

# 状态显示函数 (右侧 RPROMPT)
function vi_mode_prompt_info() {
[[ ${KEYMAP} == vicmd ]] && echo "%F{red}-- NORMAL --%f" || echo "%F{green}-- INSERT --%f"
}
RPROMPT='$(vi_mode_prompt_info)'

# 模式切换钩子:同步光标形状与状态显示
function zle-keymap-select() {
if [[ ${KEYMAP} == vicmd ]]; then
echo -ne '\e[1 q' # 方块
else
echo -ne '\e[5 q' # 竖线
fi
zle reset-prompt # 仅在模式切换时重绘,保证性能
}
zle -N zle-keymap-select

# 初始行钩子:防止猛按回车掉帧
function zle-line-init() { echo -ne '\e[5 q' }
zle -N zle-line-init
precmd() { echo -ne '\e[5 q' }

# 补全菜单 HJKL 导航
zmodload zsh/complist
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'j' down-line-or-history
bindkey -M menuselect 'l' vi-forward-char

3. Kitty + Neovim:历史回溯与复制

配置文件~/.config/kitty/kitty.conf
利用 Neovim 的威力处理终端滚动缓存。

1
2
3
4
5
# 设置 nvim 为分页器
scrollback_pager nvim -c "set signcolumn=no showtabline=0" -c "silent! write! /tmp/kitty_scrollback_buffer | te cat /tmp/kitty_scrollback_buffer - " -c "normal G"

# 快捷键:Alt + H 进入回溯模式
map alt+h show_scrollback

4. Rofi:应用导航

配置文件~/.config/rofi/config.rasi
强制释放被占用的快捷键。

1
2
3
4
5
6
7
8
9
10
11
12
13
configuration {
kb-remove-char-back: "BackSpace"; // 释放 Ctrl+h
kb-remove-to-eol: ""; // 释放 Ctrl+k
kb-mode-complete: ""; // 释放 Ctrl+l
kb-mode-next: "Shift+Right"; // 释放 Right
kb-mode-previous: "Shift+Left"; // 释放 Left

kb-row-up: "Up,Control+k";
kb-row-down: "Down,Control+j";
kb-row-left: "Control+h";
kb-row-right: "Control+l";
kb-accept-entry: "Control+m,Return,KP_Enter";
}

📖 六、 使用指南

1. 窗口管理 (Hyprland)

  • 切换窗口Super + h/j/k/l。无需鼠标,直接在窗口间穿梭。
  • 调整尺寸Super + Shift + h/j/k/l。长按 L 键,窗口向右丝滑变宽。

2. 终端编辑 (Zsh)

  • 进入/退出模式:默认打字模式(竖线光标),快速输入 jk 进入命令模式(方块光标,右侧变红)。
  • 高效移动:在命令模式下用 w / b 按单词跳跃,用 0 / $ 跳到行首行尾。
  • 长命令编辑:模式下按 v,自动在 Neovim 中打开当前行,编辑完 :wq 即可回填。

3. 历史搜索与复制 (Kitty + Nvim)

  • 场景:需要复制屏幕上方几百行前的报错 ID。
  • 操作:按 Alt + H。现在你处于一个 Neovim 窗口中:
    1. / 搜索关键字。
    2. v 选中,y 复制(已同步系统剪切板)。
    3. q 退出,回到终端粘贴。

4. 应用启动 (Rofi)

  • 按下启动快捷键,输入名字,按 Ctrl + j/k 上下挑选,Ctrl + m 确认。

💡 常见问题排查 (FAQ)

  1. 卡顿问题:如果长按回车卡顿,请检查 .zshrczle-line-init 函数内是否包含了 zle reset-prompt必须删掉它
  2. 按键冲突:如果 Super + H 无效,终端运行 grep -r "bind.*H" ~/.config/hypr/ 找出占用它的配置并注释掉(JaKooLit 默认通常将其用于帮助面板)。
  3. 剪切板无效:确保 Neovim 配置文件中包含 vim.opt.clipboard = "unnamedplus",否则 Alt + H 模式下的复制无法传给浏览器。

💡 肌肉记忆训练建议 (训练计划)

为了在一周内彻底习惯这套系统,请尝试以下练习:

  1. 第一天:强制自己只用 jk 退出插入模式,删掉脑子里的 ESC
  2. 第二天:在终端需要修改命令时,严禁使用方向键。进入 Normal 模式,用 w/b 定位,用 x 删除。
  3. 第三天:练习 Super + HJKL 切换窗口。如果发现自己去摸鼠标,立刻把手缩回来。
  4. 第四天:尝试用 Alt + h 复制一次终端里的文本,感受 Neovim 处理滚动缓存的威力。

核心心法当你想动方向键或鼠标时,停顿 0.5 秒,想想对应的 HJKL 组合键是什么。

Vi 习惯指南: Zsh

环境声明:Arch Linux | Kitty 0.44 | Zsh (Vi-mode) | Neovim v0.11.5 | Hyprland (JaKooLit)

本指南旨在将 HJKL 的肌肉记忆贯穿整个系统:从窗口管理到终端编辑,再到历史回溯。


1. 终端级:Zsh Vi-Mode 核心操作

在终端执行 bindkey -v 后, Zsh 变成了“单行 Vim”。

🔹 模式切换

  • 进入命令模式 (Normal):输入 jk (自定义) 或 ESC
    • 视觉提示:光标变为 方块 █
  • 进入插入模式 (Insert):按 i (前插)、a (后插)、I (行首)、A (行尾)。
    • 视觉提示:光标变为 竖线 |

🔹 移动与快速定位 (Normal Mode)

  • 基础h j k l (左 下 上 右)。
  • 单词w (跳至下个单词头), b (跳至上个单词头), e (跳至单词尾)。
  • 行缘0 (行首), $ (行尾)。
  • 历史翻阅j / k/ 后输入关键词回车。

🔹 极速编辑

  • 删除x (删字符), dw (删单词), dd (清空行)。
  • 修改cw (改单词), C (改至行尾)。
  • 撤销u (Undo)。

2. 跨维度:Kitty + Neovim 联动

通过配置 scrollback_pager,我们可以用 Neovim 的威力来处理终端历史输出。

🔹 历史回溯 (Alt + H)

  1. 按下 Alt + H:当前终端所有输出在一个临时的 Neovim 缓冲区打开。
  2. 搜索:输入 /关键词 快速定位报错信息或日志。
  3. 复制:按 v 选中,按 y 复制(已同步至系统剪切板)。
  4. 退出:输入 :q 瞬间回到直播终端。

🔹 长命令编辑 (Normal Mode -> v)

  1. 在输入复杂命令时,按 jk 进入命令模式。
  2. 按下 v
  3. 在弹出的全屏 Neovim 中编写脚本。
  4. :wq 保存退出,命令自动回填并准备执行。

3. 系统级:Hyprland 窗口管理

利用 Super (Windows 键) 配合 HJKL 实现无感窗口切换。

  • Super + H/J/K/L:在当前工作区切换窗口焦点。
  • Super + Shift + H/J/K/L:物理移动当前窗口的位置。

💡 核心配置备忘 (Configuration Cheat-sheet)

Zsh (~/.zshrc)

1
2
3
4
5
bindkey -v
export KEYTIMEOUT=15
bindkey -M viins 'jk' vi-cmd-mode
bindkey -M vicmd 'k' up-line-or-beginning-search # 带记忆的搜索
bindkey -M vicmd 'j' down-line-or-beginning-search

Kitty (~/.config/kitty/kitty.conf)

1
2
scrollback_pager nvim -c "set signcolumn=no showtabline=0" -c "silent! write! /tmp/kitty_scrollback_buffer | te cat /tmp/kitty_scrollback_buffer - " -c "normal G"
map alt+h show_scrollback

Hyprland (~/.config/hypr/UserConfigs/UserKeybinds.conf)

1
2
3
4
bind = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d

📋 常用快捷键速查表

功能维度 快捷键 动作描述
模式切换 jk 退出插入模式
命令编辑 v 在 Neovim 中编辑当前行
屏幕复制 Alt + H 像编辑文件一样复制终端历史
历史命令 k / j 向上/下翻阅历史
窗口聚焦 Super + HJKL 切换当前工作区窗口
窗口位移 Super + Shift + HJKL 调整窗口布局

Generated by Arch_z Config Reference

qutebrowser 的核心逻辑是 Vim 风格,它极其强调“模式”(Mode)。在普通模式下,每一个按键都是一个功能命令。

1. 访问与地址栏 (URL & Commands)

这部分是你之前比较关心的核心操作。

按键 功能 说明
o 打开网页 弹出命令行,输入网址或搜索词
O 新标签页打开网页 在新标签页打开输入的内容
xo 修改当前 URL 自动填充当前地址供你编辑修改
xO 修改并在新标签打开 基于当前地址修改,在新页打开
go 重新载入当前 URL 填充当前地址,类似于刷新前的确认
r 刷新 相当于浏览器刷新按钮
R 强制刷新 忽略缓存刷新 (Ctrl+F5)
yy 复制 URL 复制当前网页地址到剪贴板

2. 标签页管理 (Tab Management)

qutebrowser 处理标签页非常高效。

按键 功能 说明
J / K 下/上一个标签 快速在不同标签页间左右切换 (高频!)
d 关闭当前标签 Delete
u 撤销关闭 恢复最近关闭的一个网页 (Undo)
T 标签切换器 弹出一个列表搜索并跳转标签页
g0 / g$ 跳至首/尾标签 快速跳转到第一个或最后一个标签
Ctrl-p 切换到上一个活跃标签 在最近使用的两个标签间来回横跳

3. 页面内导航 (Navigation)

不需要鼠标,像操作 Vim 一样滚动页面。

按键 功能 说明
j / k 向下/向上滚动 小幅度滚动
h / l 向左/向右滚动 页面左右移动
gg / G 回到顶部/去到底部 快速长距离移动
Space 向下翻页 相当于 PageDown
H / L 后退/前进 浏览历史的前进后退 (大写字母)
f 点击模式 (Hint) 给所有链接打上字母标签,按字母即点击 (核心!)
F 后台打开链接 同上,但在后台新标签页打开 (相当于 open -b)

按键 功能 说明
/ 页面内搜索 输入文字开始在当前页查找
n / N 下一个 / 上一个 循环跳转搜索到的匹配项
? 百度/谷歌搜索 (视配置而定) 快捷搜索选中文字

5. 缩放与显示 (Zoom & Display)

按键 功能 说明
+ / - / = 放大 / 缩小 / 恢复 页面缩放控制
i 输入模式 进入文本框填写内容,按 Esc 退出回普通模式
v 视觉模式 像在编辑器里一样选择网页文本
w p 切换代理 如果你配了多代理,这是常用的快捷命令 (视配置)
b b 隐藏/显示状态栏 极致简洁模式

6. 进阶小建议

  1. 分不清模式时按 Esc:如果你发现按什么键都没反应(或者在打字),说明你在“输入模式”,按 Esc 回到“普通模式”是所有操作的前提。
  2. 善用 F:这是用 qutebrowser 的灵魂。看新闻或搜东西时,按一下 F,然后看准链接上的字母,按下对应按键,网页就在后台打开了,手不需要离开键盘。
  3. :help 是最好的文档:在底部命令行输入 :help 回车,会打开一个非常详尽且带搜索功能的本地文档。
  4. 组合键:如果想给特定网页写规则(比如你之前问的 Hyprland 规则),可以用 :set 临时测试属性。

如果你想自定义按键:
可以编辑 config.py,使用 config.bind('你的按键', '命令') 来随心所欲定制。例如:
config.bind('tt', 'open -b') 就可以把 tt 设为在后台打开。

1. 基础导航 (Navigation)

这些命令让你在目录间自由穿梭:

  • j / k:向下 / 向上移动
  • h:返回上一级目录
  • l:进入选中的目录或打开文件
  • gg:跳到目录顶部
  • G:跳到目录底部
  • Ctrl + u / Ctrl + d:向上 / 向下翻半页
  • H:后退(历史记录)
  • L:前进(历史记录)
  • Enter:打开选中的文件

2. 文件操作 (File Operations)

Ranger 的文件操作类似 Vim 的文本编辑:

  • i:全屏预览文件内容
  • E:编辑文件(调用环境变量 $EDITOR,通常是 Vim/Nano)
  • yy:复制文件(Copy/Yank)
  • dd:剪切文件(Cut)
  • pp:粘贴文件(Paste)
  • po:粘贴并覆盖重名文件
  • cw:重命名文件(Rename)
  • delete:删除文件(注意:通常是直接删除,不进回收站,需确认)
  • da:全选文件(在某些配置中)
  • /:在当前目录下搜索文件

3. 标记与多选 (Marking/Selection)

处理多个文件时非常有用:

  • space(空格):选中当前文件,并移动到下一行
  • v:反转选择(或进入可视化模式,类似 Vim)
  • uv:取消所有选中
  • V:进入可视化模式(按 j/k 批量选择)

4. 视图与显示 (View & Display)

调整界面展示效果:

  • zh:切换显示隐藏文件(以 . 开头的文件)
  • zp:切换文件预览功能的开启/关闭
  • zi:切换显示/隐藏侧边栏
  • R:刷新当前目录
  • z:打开设置菜单(可以配合其他字母快速调整,如 zn 切换行号)

5. 标签页管理 (Tabs)

像浏览器一样管理多个路径:

  • gnCtrl + n:新建标签页
  • gt / gT:切换到 下一个 / 上一个 标签页
  • Alt + [1-9]:直接跳转到指定数字的标签页
  • gcCtrl + w:关闭当前标签页

6. 执行命令与 Shell (Execution)

在 Ranger 中直接运行外部命令:

  • s:在当前目录下打开 Shell(退出 Shell 后返回 Ranger)
  • ::输入控制台命令(如 :rename newname
  • !:运行外部 Shell 命令。例如 !unzip test.zip
  • @:针对选中的文件运行外部命令
  • f:快速跳转(输入字符后会自动过滤当前目录下的文件)

7. 排序 (Sorting)

  • on:按名称排序 (Name)
  • os:按大小排序 (Size)
  • om:按修改时间排序 (MTime)
  • oc:按改变时间排序 (CTime)
  • oa:按访问时间排序 (ATime)
  • ot:按类型排序 (Type)
  • or:反向排序 (Reverse)

8. 系统操作

  • q:退出 Ranger
  • W:打开当前目录的控制台日志
  • ?:打开帮助手册(按 ? 后再按 k 查看快捷键列表)

💡 小贴士:

  1. 书签功能:按 m 后加一个字母(如 ma)标记当前目录;按 ' 后加该字母(如 'a)即可快速跳转回来。
  2. 配置路径
    • 主配置文件:~/.config/ranger/rc.conf(可修改快捷键)
    • 快捷键定义:~/.config/ranger/rifle.conf(定义用什么软件打开什么文件)
  3. 安装预览增强:为了更好的预览效果,建议安装 highlight (代码高亮)、img2txtw3m (图片预览)。

可以在 Ranger 中输入 :help 或者直接查看其 Man Page

2026-02-04:前两天又看了下jakoolit的youtube频道,发现其实有些时候不用调QT_SCALE_FACTOR(缩放),可以用GTK Setting来设置全局字体的缩放

0. 发现问题

在 2.5K 屏幕、系统缩放 1.25 倍的 Hyprland 环境下,WPS Office 默认显示效果不佳。
我首先尝试了常见的局部环境变量修改:
QT\_SCALE\_FACTOR=1.25 /usr/bin/wps &
结果: 界面虽然变大了,但文字明显变模糊,存在像素拉伸感。

1. 坚持“局部修改”原则

我不希望修改 UserSettings.conf 中的全局 XWayland 设置,因为那会影响到系统所有 X11 程序的默认表现。我希望找到一种只针对特定软件生效、且不破坏系统全局配置的方法。

2. 解决方案:从 Scale Factor 转向 DPI 调整

经过测试,我发现调整 DPI(Dots Per Inch)对于处理文字密集的办公软件效果更好。

2.1 终端先行测试

在正式修改配置文件前,我先在终端通过命令进行验证:

1
2
# 测试以 120 DPI (即 96 * 1.25) 启动 WPS 表格
env QT_FONT_DPI=120 et

结果: 软件界面大小符合预期,且文字渲染比使用 Scale Factor 更加清晰锐利。

2.2 局部修改启动入口

验证成功后,我将此配置应用到软件的快捷方式中,而不触碰任何系统全局配置。

操作步骤:

  1. 复制系统默认快捷方式到本地目录(防止更新覆盖):

    1
    2
    mkdir -p ~/.local/share/applications/
    cp /usr/share/applications/wps-office-*.desktop ~/.local/share/applications/
  2. 修改 .desktop 文件中的 Exec 启动行。
    以 WPS 文字为例,将 Exec 修改为:
    Exec=env QT_FONT_DPI=120 /usr/bin/wps %f

    (我使用了 sed 批量完成了这个操作,并运行 update-desktop-database 刷新了缓存。)

    我发现不刷新缓存也是可以的

3. 经验总结

作为一个系统小白,这次折腾让我学到了两点:

  1. 测试先行:在终端通过 env 命令临时启动软件是最好的测试方式,行得通再改文件。
  2. 局部优先:尽量不去动影响全局的配置文件。通过调整特定软件的 DPI,既解决了显示模糊,又维持了系统其他部分的稳定性。

记录时间:2025年12月


2. 本次调优命令总结

命令 作用说明 为什么用它
env QT_SCALE_FACTOR=1.25 wps 终端测试:比例缩放启动 验证发现界面变大但模糊,故放弃
env QT_FONT_DPI=120 et 终端测试:DPI 缩放启动 验证成功,文字清晰且大小合适
cp /usr/share/applications/wps* ~/.local/share/applications/ 备份快捷方式到用户目录 遵循局部修改原则,不影响系统全局文件
sed -i 's/^Exec=/Exec=env QT_FONT_DPI=120 /g' 批量注入 DPI 环境变量 固化测试结果,使点击图标也能生效
update-desktop-database ~/.local/share/applications 刷新本地应用数据库 确保修改后的快捷方式立即被系统识别
echo $? 查看命令退出状态 养成好习惯,确认手动启动的程序是否报错

💡 提示词补充:

如果以后再遇到软件显示或运行问题,可以对 AI 说:

“我遇到一个软件显示问题。我的原则是:不修改全局配置,优先在终端使用 env 尝试局部解决。请基于这个前提,为我提供针对 [软件名] 的调试参数或 .desktop 修改方案。”

这种提问方式能让 AI 直接跳过那些“大动干戈”的建议,直接给你最符合你习惯的“手术刀式”方案。

这是一份专为使用 JaKooLit 配置方案并习惯使用 Vim 的 Arch Linux 用户准备的备忘录。

1. 系统管理与更新 (Pacman & Yay)

1
2
3
4
5
6
sudo pacman -Syu             # 同步源并更新系统
yay -Syu # 更新系统及所有 AUR 软件包
yay -S <pkg> # 安装新软件包
sudo pacman -Rns <pkg> # 彻底删除包及其依赖
sudo pacman -Qdt # 列出所有孤立依赖
sudo pacman -Rns $(pacman -Qtdq) # 清理所有孤立依赖

2. 使用 Vim 编辑 JaKooLit 核心配置

JaKooLit 采用模块化设计,建议仅修改 UserConfigs 文件夹内的文件,以防后续更新覆盖。

1
2
3
4
5
6
7
8
9
10
11
12
# 核心自定义配置
vim ~/.config/hypr/UserConfigs/UserKeybinds.conf # 自定义快捷键
vim ~/.config/hypr/UserConfigs/UserSettings.conf # 窗口装饰、手势、布局
vim ~/.config/hypr/UserConfigs/Monitors.conf # 显示器分辨率、位置
vim ~/.config/hypr/UserConfigs/ENVariables.conf # 环境变量 (NVIDIA 驱动设置)
vim ~/.config/hypr/UserConfigs/Startup_Apps.conf # 自启动项
vim ~/.config/hypr/UserConfigs/WorkspaceRules.conf # 工作区绑定规则

# UI 界面配置
vim ~/.config/waybar/config # Waybar 布局
vim ~/.config/waybar/style.css # Waybar 样式
vim ~/.config/kitty/kitty.conf # 终端配置

3. JaKooLit 快捷键方案 (速查表)

前缀说明SUPER = Windows键, ALT = Alt, CTRL = Ctrl, SHIFT = Shift

3.1 核心系统控制

快捷键 功能描述 备注
SUPER + H 启动快捷键速查表 忘记按键时的救星
SUPER + SHIFT + K 搜索所有快捷键 通过 Rofi 全局搜索
SUPER + SHIFT + E JaKooLit 设置菜单 调整系统核心参数
CTRL + ALT + L 屏幕锁定 调用 hyprlock
CTRL + ALT + P 电源菜单 关机、重启、睡眠
CTRL + ALT + Del 退出 Hyprland 立即注销并返回登录界面

3.2 应用程序启动

快捷键 功能描述 默认程序
SUPER + Enter 打开终端 kitty
SUPER + SHIFT + Enter 下拉式终端 类似 Quake 的隐藏终端
SUPER + D 应用启动器 rofi-wayland
SUPER + B 启动浏览器 系统默认浏览器
SUPER + E 打开文件管理器 Thunar
SUPER + S 谷歌搜索 通过 Rofi 快速输入搜索词

3.3 窗口与布局管理

快捷键 功能描述 备注
SUPER + Q 关闭活动窗口 正常退出程序
SUPER + SHIFT + Q 强制关闭窗口 针对卡死应用
SUPER + Space 切换浮动状态 针对当前单个窗口
SUPER + SHIFT + F 全屏切换 切换全屏模式
SUPER + ALT + L 切换布局模式 Dwindle 或 Master 布局
SUPER + ALT + 滚轮 桌面缩放 桌面放大镜功能

3.4 主题与 UI 定制

快捷键 功能描述 备注
SUPER + W 选择壁纸 调出壁纸菜单
SUPER + SHIFT + W 选择壁纸效果 ImageMagick 特效
CTRL + ALT + W 随机切换壁纸 使用 swww 随机更换
SUPER + CTRL + B 选择 Waybar 样式 实时更换状态栏皮肤
SUPER + ALT + B 选择 Waybar 布局 调整状态栏模块位置
SUPER + SHIFT + G 游戏模式 一键开关所有动画/模糊 (提速)

4. Hyprland 状态控制 (hyprctl)

1
2
3
4
5
hyprctl reload       # 重新加载配置
hyprctl monitors # 查看显示器 ID 和状态
hyprctl clients # 查看当前运行窗口的 class (用于写窗口规则)
hyprctl activewindow # 查看当前聚焦窗口的详细信息
hyprctl kill # 鼠标点击强行杀掉窗口

5. Wayland 常用工具命令

1
2
3
4
5
6
7
8
9
10
11
# 截图 (JaKooLit 已集成脚本)
~/.config/hypr/scripts/Screenshot.sh --now # 立即全屏截图
~/.config/hypr/scripts/Screenshot.sh --area # 选区截图

# 剪贴板历史
cliphist list | rofi -dmenu | cliphist decode | wl-copy

# 亮度与音量
brightnessctl set +10% # 增加亮度
pamixer -i 5 # 增加音量 (需安装 pamixer)
pamixer --default-source -t # 麦克风静音

6. 系统服务与维护

1
2
3
4
5
lsusb                          # 查看 USB 设备
nmcli device wifi list # 查看附近 WiFi
nmcli device wifi connect "SSID" password "PWD" # 命令行连接 WiFi
systemctl status bluetooth # 查看蓝牙状态
journalctl -xe --unit hyprland # 查看 Hyprland 报错日志

7. Vim 编辑器极简速查

1
2
3
4
5
6
7
8
9
10
:w                   " 保存
:q " 退出
:wq " 保存并退出
/关键词 " 搜索内容
n " 跳转下一个结果
gg " 跳到文件开头
G " 跳到文件末尾
dd " 删除整行
u " 撤销上一步
Ctrl + v " 进入块操作模式 (批量注释/缩进)

8. JaKooLit 脚本更新与维护

1
2
3
cd ~/Arch-Hyprland   # 进入克隆的 JaKooLit 仓库目录
git pull # 拉取最新更新
./install.sh # 运行安装程序进行修复或更新

💡 进阶:为 Vim 用户优化 Hyprland 键位

建议在 ~/.config/hypr/UserConfigs/UserKeybinds.conf 中添加以下内容,实现 HJKL 窗口跳转:

1
2
3
4
5
6
7
8
9
10
11
# 使用 Vim 键位切换窗口焦点
bind = SUPER, H, movefocus, l
bind = SUPER, L, movefocus, r
bind = SUPER, K, movefocus, u
bind = SUPER, J, movefocus, d

# 使用 Vim 键位移动窗口位置
bind = SUPER SHIFT, H, movewindow, l
bind = SUPER SHIFT, L, movewindow, r
bind = SUPER SHIFT, K, movewindow, u
bind = SUPER SHIFT, J, movewindow, d
0%