news 2026/4/21 5:36:35

Zsh Alias Preview 预览 zsh 中的命令缩写

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zsh Alias Preview 预览 zsh 中的命令缩写

原文链接https://www.castamerego.com/blog/zshAliasPreview

alias 用多了之后就有一个问题:敲gco的时候记得它是git checkout,但gcb是什么来着?dcu又是什么?通常的做法是which gcb看一眼再回来重敲一遍,挺打断思路的。笔者写了个 Zsh 插件,在敲命令的时候直接把 alias 展开后的内容显示在 message area,免去这一步

缘起

笔者~/.zshrc里 alias 越攒越多 —— eza 的几个变体、git 的若干缩写、docker compose 一坨。短 alias 敲起来是省事,但回头看历史记录或者教别人用的时候,经常要which xxx一下才想起来到底展开成什么

之前也想过把which绑个快捷键,但本质上还是要打断输入流。笔者想要的是 IDE 里那种 inline hint —— 边敲边看,眼角余光扫一眼就够了。Zsh 的 message area(提示符下面那一行)正好闲着,于是就有了这个插件

功能

主要功能有:

  • 实时预览 alias 展开后的命令,显示在 message area
  • 可以配置只对感兴趣的命令展示,避免被ll之类的低价值预览刷屏
  • 长命令自动截断,不会撑爆下面那一行
  • 仅在内容变化时重绘,避免输入过程中的闪烁

安装

如果还没装过 Zsh 和 Oh My Zsh,可以先看 配置 Linux 终端 (zsh) 把基础环境搭好

目前是 Oh My Zsh manual install。先把仓库 clone 到 custom plugins 目录:

git clone https://github.com/Casta-mere/zsh-alias-preview \ ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-alias-preview

然后在~/.zshrcplugins=(...)里加上zsh-alias-preview,最后 source 一下:

source ~/.zshrc

配置

默认只对gitdocker这两个命令的 alias 显示预览 —— 笔者的高频场景就这俩,其他的不太常需要看展开。想加别的命令,在~/.zshrc里做如下修改即可:

~/.zshrc

typeset -ga ALIAS_PREVIEW_COMMANDS=(git docker ls kubectl)

规则很简单:alias 展开后第一个 token 在数组里就显示预览,不在就什么都不做。例如gco='git checkout'会显示,ll='ls -alF'默认不会,加ls进去之后就会

实现思路

整个插件没有引入任何依赖,全靠 Zsh 自身的 ZLE (Zsh Line Editor) 机制。核心就三件事

挂钩重绘事件。Zsh 提供了add-zle-hook-widget,可以在 ZLE 的几个生命周期点(line-init/line-pre-redraw/line-finish等)注入自己的 widget。这里挂在line-pre-redraw上 —— 每次行内容变化、重绘前都会触发:

add-zle-hook-widget line-pre-redraw _preview_alias_message

解析当前命令行的第一个 token。ZLE 把当前输入暴露在$BUFFER变量里。去掉前导空格、取第一个空格之前的部分,就是用户正在敲的命令。然后用${aliases[$first_word]}查 Zsh 内置的aliases关联数组(所有 alias 都在这里),有就拿到展开字符串:

local trimmed="${BUFFER#"${BUFFER%%[! ]*}"}" local first_word="${trimmed%% *}" local expanded="${aliases[$first_word]}"

写到 message area。zle -M <text>就是往提示符下面那行写消息的标准 API,输入下一个字符就会自然刷新。再配一个_alias_preview_last缓存,避免内容没变时的重复重绘 —— 这就是「不闪烁」的全部秘密:

zle -M " ↳ 💡: ${expanded}"

剩下两个细节:

  • 过滤命令${ALIAS_PREVIEW_COMMANDS[(Ie)$exp_cmd]}——(Ie)是 Zsh 数组的精确匹配下标语法,返回索引,存在则非零
  • 避开补全菜单通过判断$LASTWIDGET是否包含complete等关键字,否则会和_complete冲突,把补全列表覆盖掉

后记

插件还很新,已知有几个地方没处理好,记录一下:

  • 嵌套 alias 不展开。如果gco='git checkout'gcm='gco main',敲gcm时只会看到gco main这一层,不会再继续把gco展开成git checkout
  • function 形式的 alias 看不到。Zsh 里很多人会用function name() { ... }替代 alias,这种东西不在${aliases[]}里,本插件不处理
  • 全局 alias(alias -g)没考虑。全局 alias 可以出现在命令的任意位置,按「第一个 token」匹配的策略会漏掉
  • 截断长度暂时写死 80。之后想抽成可配置项

笔者自己用够了,先这样。有边界情况欢迎开 issue 或者 PR
Github zsh-alias-previewhttps://github.com/Casta-mere/zsh-alias-preview

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 5:31:28

2026年GEO排名优化服务商实力测评,看完不踩坑

伴随生成式AI搜索的普遍推广&#xff0c;GEO&#xff08;生成引擎优化&#xff09;已然成为企业数字营销的全新战场&#xff0c;它与传统SEO有所不同&#xff0c;GEO着重于使品牌内容在GPT&#xff0c;&#xff0c;等多种AI模型的回应里得到优先推荐&#xff0c;面对市场上不断…

作者头像 李华
网站建设 2026/4/21 5:28:17

图片旋转判断在增强现实中的关键作用

图片旋转判断在增强现实中的关键作用 1. 引言 你有没有试过在玩增强现实游戏时&#xff0c;虚拟物体总是跟现实场景对不上&#xff1f;或者在使用AR测量工具时&#xff0c;尺寸和位置总有些偏差&#xff1f;这些问题很多时候都源于一个看似简单却至关重要的技术环节——图片旋…

作者头像 李华
网站建设 2026/4/21 5:27:16

如何评估一个 AI Agent Harness Engineering 的性能表现

如何评估一个 AI Agent Harness Engineering 的性能表现 关键词:AI Agent、Harness Engineering、性能评估体系、任务调度准确率、容错恢复率、资源利用率、端到端时延 摘要:随着AI Agent从概念验证走向大规模产业落地,作为Agent"神经中枢"的Harness控制层的性能直…

作者头像 李华
网站建设 2026/4/21 5:24:50

YOLOv11新技术前瞻:其对未来丹青识画系统物体识别模块的潜在影响

YOLOv11新技术前瞻&#xff1a;其对未来丹青识画系统物体识别模块的潜在影响 最近和几位做计算机视觉的朋友聊天&#xff0c;大家都不约而同地提到了YOLO系列模型。从YOLOv5到v8、v9&#xff0c;再到最近传闻中的v10&#xff0c;这个系列的每一次更新&#xff0c;都实实在在地…

作者头像 李华
网站建设 2026/4/21 5:22:13

可落地类量子虚实嵌套多时空子母体协同:全域计算底层范式

作者&#xff1a;一切皆是因缘际会一、引言本文提出一套可直接在现有经典硬件上工程落地的全新计算底层范式。 核心机制为&#xff1a;全息嵌套结构 虚实投影分离 单向层级约束。 通过 “唯一真实本源 全域投影实例” 的架构设计&#xff0c;从根源解决分布式系统一致性、同…

作者头像 李华