try

2026-01-20

软件及插件

对时间的慷慨,就等于慢性自杀。——奥斯特洛夫斯基

try:给每一次“灵感小实验”一个干净的家

你是不是也有这种开发习惯:随手起个目录叫 testtest2actually-working-test,过几天又在 /tmp 里开一堆、桌面上再来几份,等到需要复用某个思路时,却在全盘搜索里找不到那段天才灵感的代码?“你的实验值得有个家。”这就是 tobi/try 的精神内核——一个“单文件 Ruby 脚本”,把你所有的小项目集中到一个可搜索、可跳转、可自动命名的目录里,让混乱有序、让迭代高效。

一句话总结:try 是“给灵感起个家”的命令行工具。它不复杂、不折腾——一个 Ruby 文件,零依赖,集成到你的 shell 后,就能把分散在不同路径的实验目录,统一纳入一个专用路径,支持模糊搜索、时间权重排序、日期前缀命名、Git worktree 一键建场等。


它解决的问题:把“混乱的实验目录”变成“有序的灵感仓”

官方 README 里的问题陈述太真实了:你在学 Redis,于是有 /tmp/redis-test~/Desktop/redis-actually~/projects/testing-redis-again……三周后你想找“连接池的妙招”,发现再也找不到那段代码。

try 的解决方式很优雅:所有实验集中到一个路径(默认 ~/src/tries,可配置),并且——

  • 支持模糊搜索,rds 就能匹配到 redis-serverconnpool 就能匹配到 connection-pool
  • 排序“懂你”:最近访问过的在前、名字更短者同分情况下更靠前
  • 自动加日期前缀,像 2025-08-17-redis-experiment,一眼知道创建时间和主题
  • 一切零配置,一个 Ruby 脚本就够了

功能一览:简洁但很“懂开发者”

  • 智能模糊搜索
    不只是子串匹配,还考虑简写、权重、名称长度等因素,让你打几下就到位。

  • 时间感知
    展示“上次访问时间”和“间隔”,最近动过的自然靠前,适合“我昨天在忙啥”的回忆路径。

  • 自动日期前缀
    新建目录时,无需再想命名规范,直接有形如 YYYY-MM-DD-<name> 的格式;如果你已经键入了名字,也可跳过日期提示。

  • 漂亮的 TUI
    清爽简洁、匹配高亮、显示分数���排序依据、默认暗色主题。

  • Shell 集成
    在 bash/zsh 或 fish 里一条 eval 即可接入,命令是跨 shell 的(绝对路径、已引用),只需为不同 shell 包一层小 wrapper。

  • Git worktree 支持
    try . [name]try worktree dir [name] 可以为当前(或指定)仓库创建日期前缀的 worktree,自动切断 HEAD,适合独立尝试一个功能。


安装与初始化

RubyGems(推荐)

1
gem install try-cli

然后把它加到你的 shell:

1
2
3
4
5
# Bash/Zsh - 添加到 .zshrc 或 .bashrc
eval "$(try init)"

# Fish - 添加到 config.fish
eval (try init | string collect)

快速手动(下载单文件)

1
2
3
4
5
6
7
8
9
10
curl -sL https://raw.githubusercontent.com/tobi/try/refs/heads/main/try.rb > ~/.local/try.rb

# 可执行
chmod +x ~/.local/try.rb

# Bash/Zsh 集成:指定存放路径(建议 ~/src/tries)
echo 'eval "$(ruby ~/.local/try.rb init ~/src/tries)"' >> ~/.zshrc

# Fish 集成
echo 'eval (~/.local/try.rb init ~/src/tries | string collect)' >> ~/.config/fish/config.fish

基本用法:一看就会,一用就爽

1
2
3
4
5
6
7
8
9
try                                      # 浏览所有实验目录(模糊搜索界面)
try redis # 跳转到与 redis 匹配的实验,或创建新的
try new api # 新建:自动命名为 "YYYY-MM-DD-new-api"
try . [name] # 在当前 Git 仓库创建日期前缀的 worktree
try ./path/to/repo [name] # 指定仓库,创建 worktree
try worktree dir [name] # 等价于上面的显式 CLI 形式
try clone https://github.com/user/repo.git # 克隆到日期前缀目录
try https://github.com/user/repo.git # 上一条的简写形式
try --help # 查看全部选项

工作树(try . / try worktree dir)的小贴士:

  • [name] 存在就用它,否则用当前目录名,都会加上今天的日期前缀
  • 在 Git 仓库内:新目录里会自动添加一个 detached HEAD 的 worktree
  • 不在仓库内:就创建目录并 cd 过去,适合无仓库的随手实验

Git 克隆的“贴心自动化”

try 能自动把 Git 仓库克隆到“合适命名”的实验目录:

1
2
3
4
5
6
7
8
9
10
11
# 自动生成目录名(按日期 + 仓库路径解析)
try clone https://github.com/tobi/try.git
# 目录示例:2025-08-27-tobi-try

# 自定义目录名
try clone https://github.com/tobi/try.git my-fork
# 目录:my-fork

# 简写(省略 'clone')
try https://github.com/tobi/try.git
# 目录示例:2025-08-27-tobi-try

支持多种仓库地址格式:

  • https://github.com/user/repo.git
  • git@github.com:user/repo.git
  • https://gitlab.com/user/repo.git
  • git@host.com:user/repo.git

注意:生成目录名时会自动去掉 .git 后缀。


快捷键与交互操作

  • ↑/↓Ctrl-P/N/J/K:导航
  • Enter:选择或创建
  • Backspace:删除一个字符
  • Ctrl-D:删除目录(有确认)
  • ESC:取消
  • 直接输入即可过滤

配置与路径

把实验目录集中到你想要的位置:

1
export TRY_PATH=~/code/sketches

默认路径是 ~/src/tries。你也可以通过 try init <path> 来指定。


Nix 与 Homebrew 支持

Nix 快速上手

1
2
3
nix run github:tobi/try
nix run github:tobi/try -- --help
nix run github:tobi/try init ~/my-tries

Home Manager 配置示例:

1
2
3
4
5
6
7
8
9
10
{
inputs.try.url = "github:tobi/try";

imports = [ inputs.try.homeManagerModules.default ];

programs.try = {
enable = true;
path = "~/experiments"; # 可选,默认 ~/src/tries
};
}

Homebrew 快速安装

1
2
brew tap tobi/try https://github.com/tobi/try
brew install try

安装后同样执行 shell 集成:

  • Bash/Zsh:

    1
    2
    eval "$(try init)"              # 默认 ~/src/tries
    eval "$(try init ~/src/tries)" # 指定路径
  • Fish:

    1
    2
    eval "(try init | string collect)"
    eval "(try init ~/src/tries | string collect)"

为什么用 Ruby?

  • 单文件、零依赖
  • 有 Ruby 的系统即可运行(macOS 自带)
  • 面对成千上万目录也够快
  • 易于 hack 与阅读

这不是一个“重型工程”,它生来就要“轻灵”,让你一分钟上手,十秒钟起一个干净的实验场。


设计哲学:拥抱真实的开发者大脑

“你的大脑不是整齐的文件夹。你有想法,你去尝试,你像喝了咖啡的松鼠一样来回切换上下文。”——try 的哲学。它鼓励你快速开始,把每个灵感都放进一个可检索、可回访、可命名的家;而不是在杂乱无章里消磨创造力。

  • 每个实验都能有一个“家”
  • 每个“家”都能立刻找到
  • 你的凌晨两点不再丢进虚空

FAQ(节选)

  • 为什么不用 cdls
    因为你可能有 200 个目录,记不住到底叫 test-redisredis-test 还是 new-redis-thing

  • 为什么不用 fzf
    fzf 超棒,但它专注于文件。try 则专注于“项目目录”,内置时间权重与自动创建逻辑。

  • 可以用来管理“正式项目”吗?
    可以,但 try 更适合“实验”。正式项目仍应该在更规范的位置(命名与结构)进行维护。

  • 我有几千个实验怎么办?
    欢迎加入俱乐部。try 的评分与排序算法会保证相关内容在前,让“巨量实验”也不至于失控。


总结与建议

如果你的生活里充满“尝试”:学一个新库、验证一个 API、试一种架构、练一个算法……try 会成为你的“灵感收纳器”。它不追求复杂的功能堆叠,只是把“实验目录”这件小事做到极致:集中存放、智能搜索、时间加权、自动命名、worktree 建场、Git 克隆、零依赖集成。

用法建议:

  • 先在 ~/src/tries 集中你的实验(或自定义 TRY_PATH
  • 习惯用 try <关键词> 打开 / 创建;给实验加“主题词”,方便复找
  • 在仓库里用 try . [name] 为一次尝试建一个独立 worktree;把思路干净地“封存”起来
  • 克隆第三方项目或模板时,直接用 try <repo-url>,让它进你的实验档案集

你的实验值得一个家。今天就把它们搬进去吧。