我写了一个命令行书签管理器,然后抛弃了浏览器书签栏

一个很小但真实的痛点

我日常工作的绝大部分时间都在终端(WSL)里:vim 写代码、git 管理版本、docker 启服务,最近还经常用 Claude Code 辅助开发。

终端用得越久,就越讨厌一种打断:想打开一个常用网站

当时的流程是:

  1. Alt+Tab 切到浏览器(键盘操作,还能接受)

  2. 手离开键盘,摸到鼠标,点开书签栏,找到那个小图标

  3. 点一下,等页面加载

  4. 手放回键盘,Alt+Tab 回到终端

一天几十次,真正打断我的不是窗口切换(Alt+Tab 很快),而是 "键盘 → 鼠标 → 键盘"的反复横跳

更麻烦的是那些不常去的网站。书签栏里没有,我不得不在地址栏敲几个字母,等浏览器从历史记录或搜索引擎里猜我想要什么。有时候猜对了,有时候得用鼠标点一下正确的候选。眼睛还要扫一遍补全列表。

我想,能不能有一个工具,让我在终端里直接敲一个短命令,就打开网站? 全程手不离键盘,打开后我再用 Alt+Tab 切回来------至少不用摸鼠标了。

于是就写了 webopen (别名叫 wi)。


它做了什么

webopen 是一个命令行书签管理器。你给它存一些"关键词 → 网址"的映射,之后输入 wi 关键词,它就用系统默认浏览器打开对应的网址。

举个例子:

bash

复制代码
 # 第一次使用:添加书签
 $ wi add gh https://github.com
 已添加书签: gh -> https://github.com
 ​
 # 以后想打开 GitHub
 $ wi gh

整个过程你只敲了 wi gh 四个字符加回车,手一直留在键盘上。


它有什么功能

(下面列的都是已经实现且稳定可用的,不画饼)

1. 添加书签(两种省事的方式)

bash

复制代码
 # 方式一:直接指定关键词和网址
 wi add gh https://github.com
 ​
 # 方式二:只写关键词,自动补全 .com(内置了常见网站映射)
 wi add baidu     # 自动变成 https://baidu.com,确认后添加
 ​
 # 方式三:只写网址,自动提取域名作为关键词(v0.3.0 支持)
 wi add https://missing.csail.mit.edu/   # 关键词自动设为 missing

2. 打开书签

bash

复制代码
 wi gh           # 精确匹配
 wi g            # 没有“g”这个书签?那就模糊搜索,唯一匹配到 github 就打开
 wi              # 无参数,弹出 fzf 列表,交互式选择

3. 删除/列表

bash

复制代码
 wi list                # 列出所有书签
 wi rm gh               # 删除指定关键词
 wi rm --interactive    # 用 fzf 多选删除

4. 导入/导出

bash

复制代码
 wi import bookmarks.html         # 从 Chrome/Firefox 导出的 HTML 文件导入
 wi export > bookmarks.txt        # 导出为内部格式(关键词|网址)
 wi export --json                 # 导出为 JSON
 wi export --md                   # 导出为 Markdown 列表

5. 终端图形界面(TUI)

如果你不想记命令,可以用 wi tui 启动一个全终端的图形界面:(有点丑、很复古)

  • 表格展示所有书签(关键词 + 网址)

  • 实时搜索框过滤

  • Ctrl+N 添加,Delete 删除

  • 鼠标和键盘都可以操作

(需要 pip install textual,因为基于 Python Textual 框架)


它是怎么实现的

代码很轻,没有想搞成大工程。

  • CLI 核心 :Bash 脚本,约 350 行。读 ~/.config/webopen/bookmarks.txt,匹配关键词,调用 xdg-open(或 macOS 的 open,或 WSL 的 cmd.exe /c start)。依赖只有 fzf(用于交互选择,不安装也能用)。

  • TUI 界面:Python 脚本,约 400 行,基于 Textual 框架。如果你不想装 Python 依赖,完全可以不用,CLI 版已经够用。

  • 共享数据 :两者读写同一个纯文本文件,格式是 关键词|网址。你可以手动编辑,也可以用工具增删。

为什么不用 Rust 重写?因为没必要。Bash 已经足够快、足够稳定,用户不需要安装任何运行时(除了 fzf 可选)。TUI 依赖 Python,但那是给想要图形界面的用户一个额外选择,不是强制。


跨平台支持

  • Linux :原生支持,调用 xdg-open

  • macOS :原生支持,调用 open

  • WSL :自动检测,调用 wslu cmd.exe /c start(打开 Windows 默认浏览器)

  • 原生 Windows(PowerShell/cmd):不支持,建议使用 WSL 或 Git Bash

你可以在 BROWSER 环境变量里指定自己的浏览器路径,脚本会优先使用。


如何安装

bash

复制代码
 git clone https://github.com/Naclarb/webopen.git
 cd webopen
 sudo make install

安装后,wiwebopen 两个命令都可以用。

依赖

  • fzf(推荐,用于交互式选择)------ 没有也能用,只是 wi 无参数时无法交互。

  • Python 3.10+ + textual(只用 TUI 才需要)

  • 其他都是系统自带(xdg-open / open / cmd.exe


它不做什么

我如实说几点,避免期望过高:

  1. 打开网站后,焦点不会自动切回终端 。你仍然需要 Alt+Tab 手动切回来。我做不到跨所有窗口管理器自动返回焦点,而且不同浏览器策略也不同。所以 wi 只负责"打开",不负责"回来"。

  2. 不支持 Windows 原生(PowerShell)。我没精力适配不同 shell 和不同打开命令,WSL 是官方推荐的方案。

  3. 不会自动同步你的浏览器书签 。目前只支持导入一次 HTML 文件,增量同步要靠你自己(或者用 scp/rsync 同步 bookmarks.txt)。

  4. 没有图形化配置界面。TUI 已经算半个图形了,但如果你想要一个真正的 GUI 窗口,这个工具不适合你。


项目现状

  • 版本:v1.0.0

  • 测试:18 个 bats 集成测试全部通过

  • 文档:有 README、CONTRIBUTING、LICENSE(MIT)

  • 补全:支持 bash、zsh、fish 的自动补全

  • 代码量:两个脚本共约 750 行,加上测试和补全脚本,总共 ~1500 行

仓库地址:https://github.com/Naclarb/webopen


写在最后

这个工具不是大发明,它只是我为了解决自己的小痛点,用最顺手的方式写出来的一小段代码。如果你也经常在终端里工作,不妨试试 wi 来代替浏览器书签栏。它不能让你彻底告别窗口切换,但可以让你 告别"手离键盘→摸鼠标→回键盘"的打断了

Star、Issue、PR 都欢迎。哪怕只是提一个你觉得不舒服的地方,我都很感谢。

祝你编码愉快,终端常伴 🐚

相关推荐
颖火虫盟主2 小时前
Linux USB 探测→枚举→RNDIS 驱动匹配 全流程笔记
linux·运维·笔记
沪漂阿龙2 小时前
LangChain 系列之Tools:让大模型真正连接业务系统
人工智能·python·langchain
程序猿编码2 小时前
子域猎手:一款高性能DNS枚举工具的设计与实现
linux·c++·python·c·dns
Full Stack Developme2 小时前
Linux cd /abc 与 cd /abc/ 区别
linux·运维·服务器
想吃火锅10052 小时前
【leetcode】20.有效的括号js
linux·javascript·leetcode
IT WorryFree2 小时前
GitHub Actions 流水线注入敏感配置完整方案(Antora + Docker Compose)
docker·容器·github
江畔柳前堤2 小时前
github实战指南05-Fork与开源协作
人工智能·线性代数·oracle·开源·github·word
朱涛的自习室2 小时前
Harness 还没学会,又来了个 Loop Engineering ?
android·人工智能·github
buhuizhiyuci2 小时前
【Linux篇】数字世界程序运行寻找地址的指南针——环境变量的详解
linux·运维·服务器