m 的诞生


最近歪楼去做了一个项目,源于我英语不太好,commit message 总想不到最准确的表达,而 Copilot 不知道抽什么风,经常生成中文的 commit message,要么就是贼长,而且大小写、动词还是名词都不符合我同一个项目的写法。

于是打算自己做一个 CLI,用来生成 commit message,倒不一定要一步到位直接帮我 commit,可以写入剪贴板,感觉这是个很舒服的工作流。后来觉得这个 CLI 工具可以拓展下,加上一些我比较需要的功能。第一个想到的是 alias 的功能,以前都是用 pdm scripts,非常好用,但是现在不用慢吞吞的 pdm 改用 uv 了,而 uv 没有现在还没有 scripts 管理的功能

另外就是,确实好像没有个跨平台的 alias 工具。

于是我实现了个。就叫它 m 吧。它的配置存在三个地方,用户目录、venv 中 m 自己的文件夹下、pyproject.toml 中。这算是最佳实践了。python 中似乎没有这样的库,我打算之后完善了之后这一部分也可以单独封装个库来。下面是一些基本用法:

m alias x "a b c d"

这样就设置了 xa b c d 的别名。可以这样使用:

m x --p v  # 相当于 a b c d --p v

昨天配置了 uv workspace,第一次尝试用一个 monorepo 的架构维护 python 库哈哈哈。今天解决了一些问题,基本上 alias 的功能算是做完了。还发现了 typer 的一个 tab completion 的 bug,所以把 completion 的功能关了,这样还减少了一个依赖 哈哈哈


我目前已经加了好多 alias 了,确实都是我日常会用到的,下面是一些比较奇特的

  • amend 一个提交,然后强推,或者强制同步 origin HEAD
  • 一键更新各种包管理软件和他们管理的包
  • ssh 到开发服务器

由于 PyPI 上短名字都被占了,我的包名还是 muspi-merl,也就是说安装略微麻烦:

pip install muspi-merol

感觉有点长,不熟悉我名字的可能不好输入。我也发邮件问了自 2014 年占了茅坑不拉屎的 M 包的作者能不能白送我,目前没收到回复。等这个包变得更多功能了之后再考虑吧~


这几天准备加上:

  • 管理环境变量
    • m env set / get / del
  • 从文件读取到剪贴板 / 从剪贴板粘贴到文件
    • m copy / paste
  • chat 的功能(这也是最初做这个项目的目的)
    • ... | m ask ""
  • 生成 commit message
    • m gen commit
  • 生成 README
    • m gen readme
  • 发起 HTTP 请求,类似 httpx[cli],但是支持流式响应和柯里化传参(中途 input)
    • m get / post / ...