我想要的是什么:
cd c/ra<tab>
完成至~/code/rails-app
,cd c/<tab>
显示~/code
我现在有什么:
如果我有一个目录c ra<tab>
并且c rails-app
在~/code/rails-app
中显示目录列表,则 c <tab>
完成~/code
在我的.zshrc
中添加此内容:
c() { cd ~/code/$1; }
_c() { _files -W ~/code -/; }
compdef _c c
这个工具看起来很有前途:https://github.com/flavio/jump但我想要更轻量级的东西。
答案 0 :(得分:2)
您所描述的标签完成(至少对于目录而言)应该由zsh
完成,而无需编写zsh
函数。
This link注意到,在提示符下键入/u/l/b
然后 tab 会扩展为/usr/local/bin
。
这对我有用 - 如果我创建一个目录~/code/rails-app
:
zsh% ls ~/code
another-app another-dir rails-app
zsh% ls ~/code/rails-app
one two
然后:
zsh% cd c/ra<TAB> # this expands to 'cd code/rails-app'
zsh% cd c/<TAB><TAB> # Double tab, one to expand "c" to "code",
zsh% # # second gives me the zsh-completion menu
我无法指出这是zsh
选项 - 我使用了相当严格的~/.zshrc
和oh-my-zsh
位。此可能是zsh
给出的功能,无需启用;如果没有,第一个链接或oh-my-zsh
甚至some version of the ZSH manual中某处的详细信息应该会有所帮助。 (我发现手册有点......压倒性,但至少可以说)。
我不相信你需要编写一个函数来实现这种行为 - zsh
绝对能够做到。