我正在使用zsh和oh-my-zsh的rc文件,我发现有些行为特别烦人.默认情况下,oh-my-zsh配置为在自动完成时返回不区分大小写的匹配项.这种行为有时候很好,但有时候真的很糟糕.有没有办法我可以配置zsh只在没有区分大小写的匹配时使用不区分大小写的匹配?
例如,这种情况将使用区分大小写的匹配:
> ls
LICENSE.txt lib/
> emacs l <-- should autocomplete to lib/
Run Code Online (Sandbox Code Playgroud)
在这种情况下,将发生不区分大小写的自动完成:
> ls
README lib/
> emacs r <-- should autocomplete to README
Run Code Online (Sandbox Code Playgroud)
谢谢!
Ahm*_*any 42
对于那些不使用 oh-my-zsh 的人,您可以添加以下两行~/.zshrc
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|=*' 'l:|=* r:|=*'
autoload -Uz compinit && compinit
Run Code Online (Sandbox Code Playgroud)
Ada*_*hon 30
~/.oh-my-zsh/custom/better-completion.zsh
使用以下行创建一个文件(假设您使用的是oh-my-zsh的默认路径)
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
Run Code Online (Sandbox Code Playgroud)
说明:
zsh完成中匹配的规则通常在matcher-list
样式中定义.对于oh-my-zsh,这个定义在~/.oh-my-zsh/lib/completion.zsh
(一次用于区分大小写,一次用于大小写不敏感).你可以在那里改变它,但如果你更新你的oh-my-zsh它可能会消失.~/.oh-my-zsh/custom
特别用于自定义,带有扩展名的文件在配置结束时.zsh
从那里加载.oh-my-zsh/oh-my-zsh.sh
.
默认情况下(不区分大小写)用于设置matcher-list
在OH-MY-zsh的是:
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
Run Code Online (Sandbox Code Playgroud)
第一个告诉处理大小写可互换.因为它是第一条规则,所以每次比赛都会使用它.
所需的唯一改变是前面加上''
为简单的完成(它甚至在第一个例子中zshcompsys(1)
为matcher-list
)
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
Run Code Online (Sandbox Code Playgroud)
在尝试不区分大小写或其他匹配之前,首先尝试完全按照其写入的方式完成当前单词.
完成:
.
,_
或者-
例如f.b
- > foo.bar
.bar
- > foobar
)小智 29
只需取消注释〜/ .zshrc中的以下行:
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
Run Code Online (Sandbox Code Playgroud)
它对我有用