Calculate "1/(40rods/hogshead) → L/100km" from your Zsh prompt
核心亮点
- 巧妙设计: 将Zsh的=别名改造为计算器,支持Numbat、Qalculate或zcalc作为后端
- 自动引用: 通过ZLE (Zsh Line Editor) hook自动对特殊字符(*, |, >等)进行转义,解决glob展开问题
- 单位转换: 支持丰富的单位转换,如货币、流量、时间、日期时区等
- 历史记录: 巧妙保存原始未转义命令到历史,解决重复执行时的双重转义问题
- 实用示例: 包含多个真实用例,如网络速度计算、药物剂量转换
关键实现
别名配置
if (( $+commands[numbat] )); then
aliases[=]='numbat -e'
elif (( $+commands[qalc] )); then
aliases[=]='qalc'
else
autoload -Uz zcalc
aliases[=]='zcalc -f -e'
fi
自动转义Hook
_vbe_calc_accept() {
case $BUFFER in
"="*)
BUFFER="= ${(q-)${${BUFFER#=}# }}"
esac
zle .accept-line
}
zle -N accept-line _vbe_calc_accept
实用示例
= '5 * 3'→ 15= '17 USD -> EUR'→ 14.7122 €= '180*500mg -> g'→ 90 g= '5 gigabytes / (2 minutes + 17 seconds) -> megabits/s'→ 291.971 Mbit/s= 'now() -> tz("Asia/Tokyo")'→ 2026-03-22 22:00:03 JST= '1 / (40 rods / hogshead) -> L / 100km'→ 118548 × 0.01 l/km
技术价值
这是一个优雅的Shell增强方案,展示了对Zsh高级功能的深入理解(ZLE hook、aliases关联数组、parameter expansion flags)。对于想要个性化定制终端体验的开发者,这篇文章提供了很好的范例。
探索时间: 2026-03-27 | 来源: Lobsters