如何向ZSH添加模糊补全(如升华文本调色板)

如何向ZSH添加模糊补全(如升华文本调色板),zsh,sublimetext,fuzzy-search,Zsh,Sublimetext,Fuzzy Search,我将shell从bash改为zsh,我想知道这是否可以像使用Sublime文本调色板一样模糊地完成命令。我认为,这种寻找、完成的概念必须无处不在。这大大节省了时间 示例: cd-dcmts->cd文档 cd-dwnls/mnf->cd-Downloads/MyNewFolder 我看到了下面的项目,它不是很有说服力 而且似乎可以定义一些设置或算法来配置zsh在完成时的行为 zstyle”:完成:“‘完成者’\u完成\u匹配\u近似值” zstyle”:完成:::::'匹配::'仅限原件 zst

我将shell从bash改为zsh,我想知道这是否可以像使用Sublime文本调色板一样模糊地完成命令。我认为,这种寻找、完成的概念必须无处不在。这大大节省了时间

示例

cd-dcmts->cd文档

cd-dwnls/mnf->cd-Downloads/MyNewFolder

我看到了下面的项目,它不是很有说服力

而且似乎可以定义一些设置或算法来配置zsh在完成时的行为

zstyle”:完成:“‘完成者’\u完成\u匹配\u近似值”

zstyle”:完成:::::'匹配::'仅限原件

zstyle”:完成:*:近似值:“'max errors 10 numeric

前面两种解决方案的问题是,文件夹在完成时不会出现在列表的顶部,而这通常是用户想要的

如果您有任何有趣的
.zshrc
模糊搜索统计,它将是有趣的


谢谢您的帮助。

您能举一个例子说明文件夹在完成时没有出现在列表的顶部吗?看起来你的配置中有一些东西在破坏你的东西。默认情况下,Zsh将仅使用目录完成
cd

zsh -f # new Zsh with only default configs
% zstyle ':completion:*' completer _complete _match _approximate
% zstyle ':completion:*:approximate:*' max-errors 3 numeric
% mkdir test && cd test
% mkdir etc && touch et0
% autoload -U compinit && compinit 
% cd et0[TAB] # removes the 'et0' and replaces it with 'etc'.

FWW,对于“到处搜索和完成”考虑尝试<代码>预测<代码>(我觉得它有点疯狂…)< /P> 此外,在Zsh中,您可以执行以下操作:

setopt auto_cd
alias -d build=/home/foo/very/long/path/build # dir alias
build # <-- changes into /home/foo/very/long/path/build
我的意思是,
cdd/m
cddwnls/mnf
;-)需要更少的键入

我建议您看看,这是一个通用模糊查找器,可以处理来自标准输入的行。它是用Ruby编写的,不是zsh脚本,所以它可能不是您想要的,但就像zsh fuzzy match一样,它为您的shell设置了
CTRL-T
绑定,并且定制其行为非常简单

下面的GIF显示了它的工作原理

编辑:

fzf在Go中被完全重写,现在用于zsh和bash。

试试看

zstyle”:完成:“'matcher list'r:[:ascii:][]

进入您的
zshrc
。它完全符合您的要求,而且它针对的是
zsh
自己的完成系统,而不是外部完成系统。

这是一项很好的工作。我正在等待为zsh开发模块。开发人员似乎在等待拉取请求。谢谢。事实上,文件夹并没有出现在顶部,因为我没有键入cd命令,只是键入了文件夹名称。所以这是正常的。您完全正确,因为
cd d/m
cd dwnls/mnf
快得多。我会尝试使用它。预测的解决方案真是太神奇了。我喜欢,谢谢;)问题是,遵循第一个示例
cd-abc[TAB]
也完成了
cd-etc/
。对我来说,如果我经常发现它在纠正问题上过于激进,那么这就没有什么帮助了。你在某种程度上可以调整它,但我不认为这是问题所希望的模糊匹配。你能详细解释一下“匹配列表”后面的论点吗?经过一个短测试(使用
ls
),它似乎可以工作,但有一些小故障:绝对路径未完成,子目录中的匹配项显示在完成列表中,但从命令行中删除,例如,
cd/
然后
ls etc/p
列出了/etc中的一些文件,这些文件的名称中有一个p,但我的命令行设置为
ls etc/
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # match upper from lower case
cd d/m[TAB] # just type the initial letter of each dir
cd Downloads/MyNewFolder