【免费下载链接】dotfiles
⌨️ The never ending updates of my dotfiles config
这是一篇面向新手的dotfiles 效率脚本教程:本文深入解析 dotfiles 仓库中 4 个实战 Shell 脚本——tmux-sessionizer(tmux 会话管理器)、fzf-git(fzf 模糊搜索 Git 工具)、fzf_listoldfiles(nvim 历史文件快速打开器)和zoxide_openfiles(跨目录文件搜索器),带你用最短路径提升终端效率。
为什么这些脚本值得学习?
dotfiles 是一整套个人终端配置集合,涵盖 tmux、zsh、nvim 等工具的配置。但真正让作者"回不去"的,是藏在 scripts/scripts/ 目录下的 4 个轻量脚本:
| 别名 | 脚本 | 一句话作用 |
|---|---|---|
tns | tmux-sessionizer.sh | 按目录一键创建/切换 tmux 会话 |
| (按键触发) | fzf-git.sh | fzf 模糊搜索 Git 分支、提交、stash 等 |
nlof | fzf_listoldfiles.sh | 快速打开 Neovim 最近编辑过的文件 |
nzo | zoxide_openfiles_nvim.sh | 跨多个目录模糊搜索文件并用 nvim 打开 |
这些脚本的共同套路是fd 找文件 + fzf 模糊选择 + bat 预览 + nvim 打开,理解了模式,你可以照葫芦画瓢写出自己的版本。
前置准备:一键安装依赖
四个脚本依赖 5 个命令行工具,均通过 Homebrew 安装:
brew install neovim fzf fd bat zoxide脚本位于 scripts/scripts/ 目录,别名在 zsh/.zshrc 中定义:
# .zshrc 中的相关配置 alias tns="~/scripts/tmux-sessionizer.sh" # tmux 会话 alias nlof="~/scripts/fzf_listoldfiles.sh" # nvim 历史文件 alias nzo="~/scripts/zoxide_openfiles_nvim.sh" # zoxide 文件搜索 source ~/scripts/fzf-git.sh # fzf-git 按键绑定脚本一:tmux-sessionizer——tmux 会话快速管理
问题:项目多到记不住 tmux 会话名,每次tmux new -s 项目名又太啰嗦。
方案:tns命令弹出 fzf 目录选择器,选中即建会话。核心逻辑见 tmux-sessionizer.sh#L52-L80:
- 用
fd列出常用工作目录(可改为你自己的目录),交给fzf选择 - 把目录名转成会话名(点号替换为下划线)
- 会话不存在就创建,存在就直接切换——内外层环境用 switch_to 函数 自动处理
attach或switch-client
还有一个巧妙的hydrate函数(第 43-49 行):如果目录里存在.tmux-sessionizer文件,会自动在新会话里source它——相当于每个项目一份 tmux 初始化脚本,新会话一开就执行好命令。
tns # 模糊选择目录,自动创建/切换 tmux 会话 tns ~/code/demo # 也可以直接传参指定目录脚本二:fzf-git——fzf 模糊搜索 Git 仓库神器
fzf-git.sh 来自知名 fzf 作者 Junegunn Choi 的项目(仓库内保留了原作者的注释说明),是fzf 与 Git 集成的最佳实践。它在 zsh/.zshrc#L82 被source引入后,自动注册Ctrl-G系列快捷键:
| 快捷键 | 功能 | 预览窗口 |
|---|---|---|
Ctrl-G f | 搜索 Git 仓库文件 | 自动显示 diff |
Ctrl-G b | 切换分支 | 分支提交历史图 |
Ctrl-G h | 浏览提交哈希 | git show详情 |
Ctrl-G t | 浏览 tag | git show详情 |
Ctrl-G s | 管理 stash | 可直接Ctrl-X丢弃 |
Ctrl-G r | 浏览 remote | 远程分支提交图 |
Ctrl-G w | 管理 worktree | 目录状态 + 提交图 |
几个值得抄的设计(fzf-git.sh 全文解析):
- 颜色自适应:
__fzf_git_color函数(第 10-18 行)识别NO_COLOR环境变量,终端不支持就自动关颜色 - 预览器优雅降级:
__fzf_git_cat(第 20-35 行)优先用bat,找不到就退回cat - 一键在浏览器打开:选中提交后按
Ctrl-O,脚本自动把git@协议地址转成https://URL 并打开(第 107-121 行) - 非 Git 目录友好提示:
_fzf_git_check(第 138-143 行)在 tmux 里会用display-message提示"Not in a git repository"
脚本三:fzf_listoldfiles——nvim 历史文件秒开
问题:nvim 有oldfiles记录你最近打开的文件,但:e提示太原始。
方案:nlof用 headless 模式把 nvim 的oldfiles导出来,变成 fzf 可搜索列表。核心在 fzf_listoldfiles.sh#L6-L22:
- 用
nvim -u NONE --headless执行一行 Lua,无界面读出vim.v.oldfiles - 过滤掉已删除的无效路径(
[[ -f "$file" ]]检查) - fzf 多选 +
bat前 500 行预览,确认后用 nvim 打开所有选中文件
nlof # 输入文件名关键词,实时预览,回车打开小技巧:脚本会先cd到第一个文件所在目录再启动 nvim,这样相对路径、项目插件才能正确加载。
脚本四:zoxide_openfiles——跨项目文件搜索
问题:忘了文件在哪个项目目录里,逐个cd找太慢。
方案:nzo脚本(zoxide_openfiles_nvim.sh)利用了zoxide 只记录你频繁访问过的目录这一特性,搜索范围比全局搜索小得多,速度却接近全局:
- 无参数(第 6-14 行):在当前目录用
fd+fzf搜索,排除.git、.cache等目录,bat预览 - 带参数(第 15-44 行):遍历
zoxide query -l列出的所有"你常去的目录"逐一搜索,命中唯一结果时跳过 fzf 直接打开 nvim——这是很贴心的细节
nzo # 当前目录模糊找文件 nzo main.py # 跨常用目录找 main.py,唯一命中直接打开4 个脚本的通用设计模式
把四个脚本横向对比,可以提炼出 dotfiles 作者的一贯套路:
- fd 负责找:比
find快得多,-H -I -E参数组合控制隐藏文件与排除项 - fzf 负责选:
--height=70%+--preview是标配,预览统一用bat --line-range :500防止大文件刷屏 - 结果交给 nvim:先
cd到文件所在目录再打开,保证编辑器环境正确 - 短别名入口:
tns/nlof/nzo三个字母的上手成本几乎为零
如何移植到自己的 dotfiles?
建议按这个顺序动手:
- 先跑通 fzf_listoldfiles.sh:依赖最少,收益最直接
- 再引入 fzf-git.sh:在 Git 仓库里体验
Ctrl-G系列快捷键的震撼 - 用 tmux 的话,把 tmux-sessionizer.sh 第 55 行的目录列表换成你自己的项目路径
- 最后配好 zoxide 日常使用,再启用 zoxide_openfiles_nvim.sh
整套脚本零第三方库、纯 Bash 实现,每个文件都不到 100 行,是学习"Shell 脚本 + fzf 工作流"的绝佳素材。配合仓库里 zsh/.zshrc 的别名配置和 README.md 的安装说明,你也能搭出一套属于自己的终端效率系统。
【免费下载链接】dotfiles
⌨️ The never ending updates of my dotfiles config
相关推荐
磁盘空间总是不够用?Czkawka 与 Krokiet:一款能自动揪出重复文件、相似图片与空文件夹的免费开源清理利器
磁盘空间总是不够用?Czkawka 与 Krokiet:一款能自动揪出重复文件、相似图片与空文件夹的免费开源清理利器 你是否有过这样的经历:电脑提示"磁盘空间不
桌面应用CLI浏览器脚本大揭秘:3分钟解锁网易云音乐隐藏功能
还在为网易云音乐的种种限制而烦恼吗?🎵 想听周杰伦却要付费?下载歌曲还要VIP?网页端音质差到像听收音机?别担心,今天我要给你介绍一个神奇的解决方案—— 浏览
前端高效 Git 工作流:.dotfiles 的 Git Aliases 与 Shell、tmux 配置实战指南
高效 Git 工作流:.dotfiles 的 Git Aliases 与 Shell、tmux 配置实战指南 .dotfiles 是一个用 GNU Stow 管
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考