![Zsh 选项卡补全无法按部分路径的要求工作](https://linux22.com/image/100953/Zsh%20%E9%80%89%E9%A1%B9%E5%8D%A1%E8%A1%A5%E5%85%A8%E6%97%A0%E6%B3%95%E6%8C%89%E9%83%A8%E5%88%86%E8%B7%AF%E5%BE%84%E7%9A%84%E8%A6%81%E6%B1%82%E5%B7%A5%E4%BD%9C.png)
我想要对zsh
.阅读了几个小时的手册后,我得出了以下结论:
zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
此外,我想按TAB
一次来显示可能的补全,只有在恰好有一个补全的情况下才修改我键入的内容。然后按TAB
第二次应该让我进入“菜单完成”模式。根据手册,我想出了这个:
zstyle ':completion:*' menu select
现在,除了一种情况之外,一切都按预期进行。我的主目录中有两个文件夹Desktop
。.rstudio-desktop
既然我已经有了setopt globdots
,我希望输入以下内容:
$ cd ~/dktop<TAB>
将我的命令保留为输入状态,并显示为完成候选者Desktop
和.rstudio-desktop
。相反,它删除 dktop
,留给我以下内容:
$ cd ~/
我查看了所有相关手册、指南、Stack Exchange 问题和各种其他来源。但无论我做什么,我都无法完成这项工作。
但有趣的是,如果我在主目录并输入以下内容,然后一切按预期工作:
$ cd dktop<TAB>
也就是说,这只是路径的非前导段的问题(您可以看到C-x h
这对应于directories
标签而不是local-directories
正在使用的标签)。
为了便于重现,这里将会~/.zshrc
重现上述情况和行为(使用zsh
Homebrew 在新的 El Capitan 虚拟机上进行测试)。
答案1
一种可能的解决方案是:
bindkey "^I" expand-word
这将导致选项卡扩展~/
到绝对路径。