对于部分路径,Zsh 选项卡完成无法正常工作

Rad*_*ugh 17 zsh autocomplete

我想对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\_}'
Run Code Online (Sandbox Code Playgroud)

此外,我想按TAB一次以显示可能的完成,只有在只有一个完成时才修改我输入的内容。然后TAB第二次按下应该让我进入“菜单完成”模式。根据手册,我想出了这个:

zstyle ':completion:*' menu select
Run Code Online (Sandbox Code Playgroud)

现在一切正常,除非在一种情况下。我有两个文件夹Desktop.rstudio-desktop在我的主目录中。由于我有setopt globdots,我希望输入以下内容:

$ cd ~/dktop<TAB>
Run Code Online (Sandbox Code Playgroud)

将我的命令保留为输入,并显示为完成候选Desktop.rstudio-desktop. 相反,它删除了 dktop,给我留下了以下内容:

$ cd ~/
Run Code Online (Sandbox Code Playgroud)

我查看了所有相关手册、指南、Stack Exchange 问题和各种其他来源。但无论我做什么,我都无法完成这项工作。

有趣的是,如果我主目录中并输入以下内容,那么一切都会按预期进行:

$ cd dktop<TAB>
Run Code Online (Sandbox Code Playgroud)

也就是说,这只是路径的非前导段的问题(您可以看到C-x h这对应于directories标签而不是local-directories正在使用的标签)。

为了便于重现,这里有一个~/.zshrc将重现上述情况和行为的方法(在zsh来自 Homebrew的全新 El Capitan 虚拟机上进行测试)。

小智 1

一种可能的解决方案是:

bindkey "^I" expand-word
Run Code Online (Sandbox Code Playgroud)

这将导致选项卡扩展~/到绝对路径。