我想对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)
这将导致选项卡扩展~/到绝对路径。