我正在使用带有oh-my-zsh的rc文件的zsh,并且有些行为我觉得特别烦人。默认情况下,oh-my-zsh配置为在自动完成时返回不区分大小写的匹配项。这种行为有时候很好,但有时候真的很糟糕。有没有一种方法可以配置zsh只在没有区分大小写的匹配时使用不区分大小写的匹配?
例如,这种情况将使用区分大小写的匹配:
> ls
LICENSE.txt lib/
> emacs l <-- should autocomplete to lib/
在这种情况下,将发生不区分大小写的自动完成:
> ls
README lib/
> emacs r <-- should autocomplete to README
谢谢!
答案 0 :(得分:27)
使用以下行创建文件~/.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:|=*'
说明:
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
加载。
oh-my-zsh 中matcher-list
的默认(不区分大小写)设置为:
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
第一个告诉处理大小写可互换。 因为它是第一条规则,所以每次比赛都会使用它。
所需的唯一更改是在''
之前添加zshcompsys(1)
进行简单完成(这甚至是matcher-list
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
中的第一个示例
.
在尝试不区分大小写或其他匹配之前,首先尝试完全按照其编写的方式完成当前单词。
完成:
_
,-
或f.b
之前部分完成,例如foo.bar
- &gt; bar
。foobar
- &gt; {{1}})答案 1 :(得分:24)
取消注释〜/ .zshrc中的以下行:
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
它对我有用
答案 2 :(得分:0)
对我来说最好的解决方案是通过.zshrc配置文件更改设置:
# Uncomment the following line to use case-sensitive completion.
#CASE_SENSITIVE="true"