如何让 zsh 在文件名中间完成工作?

如何让 zsh 在文件名中间完成工作?

这有效

通常,zsh的制表符补全效果很好。

$ touch foo-1-bar foo-2-bar
$ touch f<Tab>
$ touch foo--bar
            ^ cursor here

再次按下Tab会弹出一个菜单,我可以从中选择文件。

$ touch foo--bar
foo-1-bar  foo-2-bar

这不

但是,这似乎不适用于开头和结尾匹配的字符串。例如:

touch foo-bar foo-foo-bar
touch f<Tab>
touch foo-bar
         ^ cursor here. <tab> again.
touch foo-bar
              ^ cursor here.

没有显示任何菜单,也没有机会选择foo-foo-bar。这是预期的行为还是错误?是否有设置可以使菜单出现在后一种情况下?

我在用着oh-my-zsh。我尝试从 中删除所有与完成相关的行~/.zshrc,但这没有什么区别。

答案1

根据评论,我尝试禁用oh-my-zsh,这解决了这个问题。然后我浏览了oh-my-zsh源代码,有选择地禁用模块。

我以前有过CASE_SENSITIVE="true",但是注释掉这一行为我解决了这个问题。显然这是一个已知错误

~/.zshrc为了解决这个问题,我可以在 source 之后添加以下行oh-my-zsh

zstyle ':completion:*' matcher-list 'r:|=*' 'l:|=* r:|=*'

答案2

就我个人而言,我更喜欢这个解决方案 -http://zsh.sourceforge.net/FAQ/zshfaq04.html#l50,它的工作方式类似于 tcsh 中的完成,并且仅完成光标之前的单词。

只需使用

    bindkey '\CI' expand-or-complete-prefix

代替

    bindkey '\CI' expand-or-complete

(默认情况下)。

答案3

另一个选项是设置 COMPLETE_IN_WORD,如同一页面上所述 -http://zsh.sourceforge.net/FAQ/zshfaq04.html#l50

setopt complete_in_word

这将尝试填充光标处的单词,并且光标点之后的所有字符将被替换为填充的内容。

相关内容