默认情况下,zsh的完成引擎仅尝试将某些内容附加到您键入的内容上。您将其配置为尝试添加前缀。简单的交互式完成配置引擎(compinstall
)在“匹配控制→子字符串完成”下提供了此功能。这样会在您的中插入一行.zshrc
:
zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'
该zstyle
内置集(主要)完成设置。在matcher-list
完成风格的方式相继尝试列表,停车时至少有一个匹配。空字符串表示默认完成(仅后缀)。该匹配控制咒语l:|=* r:|=*
手段尝试前缀匹配*
和后缀匹配*
,即任何前缀和后缀。
您可以禁止以开头的前缀_
。这仍然允许以开头的单词的完成_
,以及通过添加前缀来完成的前缀,但是前缀不能以开头_
。
zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'
这适用于所有补全,而不仅仅是命令名的补全。我不知道如何将其限制为命令名称。
应该有一种方法可以更精确地排除以开头的命令名_
,但是我不知道如何。首先是ignored-patterns
完成风格。
zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'
这不包括以_
; 开头的匹配;但是,如果没有匹配项,则zsh会在没有忽略规则的情况下再次尝试。这样做的好处是,如果命令首先以下划线开头,那么它将在第二遍完成。糟糕的是,如果没有匹配项,zsh将因此尝试尝试添加下划线,因此,如果有vi
,view
但没有,vim
则按Tabafter vi
将提供vi
,view
但没有_vim
,但如果您键入,vim
则完成将提供_vim
。