Zsh中fzf-tab预览失效:指定命令配置不生效的原因咨询
fzf-tab针对cd和__zoxide_z的预览规则失效,全局配置却正常?
核心原因:命令匹配不对应
1. 命令被别名/函数替换了
你的zsh环境里,cd或者z(zoxide的常用别名)大概率被设置了别名或者被shell函数重载了:
- 比如很多配置会把
cd设成alias cd='z',用zoxide的跳转替代原生cd; - zoxide本身也会把
z设成__zoxide_z的别名。
这时候触发补全的是别名/函数的名称,而非你写的cd或__zoxide_z,所以针对原生命令的规则自然匹配不上。
2. fzf-tab的匹配逻辑是精确对应命令名
fzf-tab的zstyle ':fzf-tab:complete:<command>:*'规则,只会匹配当前正在补全的命令的实际名称。比如你输入z补全时,触发的是:fzf-tab:complete:z:*的规则,而不是:fzf-tab:complete:__zoxide_z:*。
全局规则:fzf-tab:complete:*会匹配所有补全场景,不管命令名是什么,所以能覆盖到这些被替换后的命令。
怎么验证?
在zsh里输入这两个命令,看看cd和z的实际定义:
type cd type z
如果输出是cd is an alias for z或者cd is a shell function,就实锤了命令名不匹配的问题。
解决办法
- 如果是别名问题,把规则改成对应别名的名称,比如:
zstyle ':fzf-tab:complete:z:*' fzf-preview 'eza $realpath' - 如果所有目录补全都需要预览,直接用全局规则也没问题,省事。
内容的提问来源于stack exchange,提问作者Anshul Goyal
相关产品推荐
相关产品推荐

