长大ing← 全部文章

写了一个命令行书签工具

一个周末项目:把浏览器书签变成可以在终端里搜索的纯文本。

浏览器书签的问题不是存不下,而是存进去就再也不看了。收藏夹越滚越长,真要找某个链接时,还是打开搜索引擎重新搜一遍。

所以我写了一个很小的命令行工具:把书签导出成纯文本,用 fzf 在终端里搜,选中后直接用默认浏览器打开。

数据长什么样

不引入数据库,就是一个 TSV 文件:

github.com/ZhangDaing	GitHub
astro.build	Astro
developers.cloudflare.com	Cloudflare Docs

第一列是 URL,第二列是标题。每行一条,用 Tab 分隔。需要的时候可以直接用 grep,也可以用 Excel 打开。

核心逻辑

Go 里读文件、过滤、交给 fzf,大概这样:

func search(query string) ([]Bookmark, error) {
    bookmarks, err := load()
    if err != nil {
        return nil, err
    }

    var matched []Bookmark
    for _, b := range bookmarks {
        if strings.Contains(strings.ToLower(b.Title), query) ||
            strings.Contains(strings.ToLower(b.URL), query) {
            matched = append(matched, b)
        }
    }
    return matched, nil
}

真正好用的是把结果管道给 fzf:

bookmark search | fzf | awk -F'\t' '{print $1}' | xargs open

在 Windows 上把 open 换成 start,在 WSL 里用 wslview。

学到的事

  • 先定义数据格式,再写代码。格式稳定了,界面可以换很多次。
  • 不要为了“以后可能需要的功能”加抽象。这个工具到现在也没有配置文件。
  • 一个周末能做完的东西,不要拖成一个月。拖着拖着就不想做了。

仓库还在整理,等测试补齐后放出来。