我经常发现自己输入:
cd a/directory/I/use/a/lot
并且在该目录里面有很多我cd
需要来回移动的文件夹。
是否有一个oh-my-zsh
插件可以允许输入如下内容:
cd somd<TAB>
然后自动完成一个目录列表,其名称包含字符串somed
, 并且可达从当前目录?例如,给定目录结构
somedirX
foo/bar/somedirY
baz/somedirZ/bum
输入cd somed<TAB>
应该返回此完成列表
somedirX
somedirY
somedirZ
我还没有找到任何东西。
答案1
首先,您需要定义一个完成函数,如下所示:
_children_dirs() {
find . -type d -name "${words[CURRENT]}*" -printf "%P\n" \
| while read -r line; do
compadd -U -X "Subdirectories: " "$line"
done
compstate[insert]=menu # no expand
}
此函数现在可以用作以下的完成器cd
:
compdef _children_dirs cd
但是,我认为使用最后一个命令不是一个好主意。事实上,尝试从你的主目录执行该命令,你的 shell 会暂时冻结(Ctrl+c停止)。 一个更好的解决方案可能是为这个完成分配一个键序列,并仅在需要且安全时使用它:
zstyle ':completion:children-dirs:*' completer _children_dirs
zle -C children-dirs menu-complete _generic
bindkey '^Y' children-dirs
接着就,随即,Ctrl+y将会触发children_dirs完成。
如果您准备使用其他命令,我认为还有另一个更好的解决方案。
function ccd { cd $1 }
compdef _children_dirs ccd
此块定义了一个新命令电荷耦合器件使用 _\children_dirs_ 作为完成符(因此用 TAB 触发)。
您可以在寻找使用以下命令在文件名中的任何位置搜索模式:"*${words[CURRENT]}*"
。
编辑:我创建了一个插入对于 zsh 来说。