Zsh制表符补全无法部分路径所需的工作


17

我想要中的文件和目录不区分大小写的模糊完成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一种可以重现上述情况和行为的工具(在zshHomebrew 的全新El Capitan虚拟机上进行了测试)。


无法复制。zsh 5.3.1Arch Linuxcd ~/dktop<tab>产量cd ~/Desktop
PythonNut

@PythonNut zsh 5.3.1在OS X上确实会重现该问题。有趣的是,操作系统之间存在差异。
Radon Rosborough

1
@PythonNut实际上,我打赌这是因为Linux区分大小写,而macOS不区分大小写。
Radon Rosborough

提醒您,并非所有Mac / macOS都不区分大小写,这取决于您的磁盘是否格式化为不区分大小写。
konqui

Answers:


1

一种可能的解决方案是:

bindkey "^I" expand-word

这将导致制表符扩展~/到绝对路径。


也许我缺少了一些东西,但是我看不到这与模糊的制表符完成或解决上面概述的问题有什么关系。如果我按照您的建议进行操作,则按TAB键将给我cd /Users/raxod502/dktop,并且完成功能被禁用。
罗斯登堡

@RadonRosborough希望是通过扩展~/到其绝对路径,模糊补全将开始起作用。似乎其中一种情况是问题,它只对它进行一次评估,但实际上您需要对其进行两次评估才能工作,因此拥有绝对路径而不是~/意味着它会回到只需要进行一次评估的状态。但是,废话,对不起,我忘记了bindkey替换了旧的绑定,而且我找不到任何说明是否有可能将两个功能绑定到一个键。没有我的绑定键,给定绝对路径时,您的完成工作是否可以按预期工作?
便秘的

否。输入路径是~/dktop还是,都没有区别/Users/raxod502/dktop。结果是相同的,即dktop当我按TAB时将其删除。
Radon Rosborough '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.