我将shell从bash更改为zsh,我想知道是否可以像Sublime Text调色板一样模糊完整命令。我认为这种搜索,完成的概念必须无处不在。这节省了很多时间。
示例:
cd dcmts -> cd Documents
cd dwnls/mnf -> cd Downloads/MyNewFolder
我看到了以下项目,并不是很有说服力。
似乎可以定义一些设置或算法来配置zsh在完成时的行为。
zstyle ':completion:*' completer _complete _match _approximate
zstyle ':completion:*:match:*' original only
zstyle ':completion:*:approximate:*' max-errors 10 numeric
以前的两个解决方案的问题是文件夹在完成时不会出现在列表的顶部,而通常是用户想要的。
如果你有任何有趣的.zshrc
来确定模糊搜索,那就很有趣了。
感谢您的帮助。
答案 0 :(得分:5)
我建议您查看fzf,这是一个可以处理标准输入行的通用模糊查找程序。它是用Ruby编写的,而不是zsh脚本,所以它可能不是你想要的,但就像zsh-fuzzy-match一样,它为你的shell设置了CTRL-T
绑定,并且定制它的行为非常简单
下面的GIF显示了它的工作原理。
修改强>
fzf完全是在Go中重写的,现在为zsh和bash附带了fuzzy completion support。
答案 1 :(得分:4)
尝试把这个
zstyle ':completion:*' matcher-list 'r:[[:ascii:]]||[[:ascii:]]=** r:|=* m:{a-z\-}={A-Z\_}'
进入zshrc
。它完全符合您的要求,它完成了zsh
自己的完成系统,而不是外部完成系统。
答案 2 :(得分:3)
您是否可以举例说明文件夹在完成时未显示在列表顶部? 似乎你的配置中有东西会破坏你的东西。默认情况下,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'.
FWIW,对于“在任何地方搜索和完成”,请考虑尝试predict
https://stackoverflow.com/a/17230878/766289(我发现它有点疯狂......)
此外,在Zsh中,您可以执行以下操作:
setopt auto_cd
alias -d build=/home/foo/very/long/path/build # dir alias
build # <-- changes into /home/foo/very/long/path/build
或者只是
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
我的意思是cd d/m
需要的输入次数少于cd dwnls/mnf
; - )