具有zsh返回不区分大小写的自动完成匹配,但更喜欢精确匹配
我将zsh与我的zsh的rc文件一起使用,我发现有一些行为特别烦人。默认情况下,oh my zsh配置为在自动完成时返回不区分大小写的匹配项。这种行为有时是好的,但有时真的很糟糕。当没有区分大小写的匹配时,是否有一种方法可以将zsh配置为仅在静态匹配中使用case 例如,本例将使用区分大小写的匹配:具有zsh返回不区分大小写的自动完成匹配,但更喜欢精确匹配,zsh,oh-my-zsh,Zsh,Oh My Zsh,我将zsh与我的zsh的rc文件一起使用,我发现有一些行为特别烦人。默认情况下,oh my zsh配置为在自动完成时返回不区分大小写的匹配项。这种行为有时是好的,但有时真的很糟糕。当没有区分大小写的匹配时,是否有一种方法可以将zsh配置为仅在静态匹配中使用case 例如,本例将使用区分大小写的匹配: > ls LICENSE.txt lib/ > emacs l <-- should autocomplete to lib/ >ls LICENSE.txt库/ >ema
> ls
LICENSE.txt lib/
> emacs l <-- should autocomplete to lib/
>ls
LICENSE.txt库/
>emacs l ls
自述库/
>emacs r创建一个文件~/.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 completion中的匹配规则通常在匹配器列表中定义。对于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中匹配器列表的默认设置(不区分大小写)为:
第一个命令告诉我们如何处理上下两个可以互换的大小写。
因为这是第一条规则,所以每场比赛都会使用它
所需的唯一更改是预先添加'
以实现简单的完成(这甚至是zshcompsys(1)
中匹配器列表的第一个示例)
在尝试不区分大小写或其他匹配之前,这会首先尝试完全按照所写内容完成当前单词
待完成:
- 第二条(原始)规则允许在
、
或-
之前部分完成,例如f.b
->foo.bar
- 第三条规则允许在书写文本的左侧完成,例如
bar
->foobar
)
只需取消注释~/.zshrc中的以下行:
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
这对我很有效我想你也必须将区分大小写设置为true?谢谢@dibibus。我删除了if
-子句,因此区分大小写的设置不再重要。我不确定当时我在想什么。哦,我的zsh自己的行为取决于区分大小写,但由于我们想改变它,甚至检查原始设置都没有意义。你在之后忘记了匹配列表:完成:“
,不是吗?@neoascetic是的,我忘记了。谢谢,我现在已经修好了。@只要你的~/.zshrc
没有源代码oh my zsh.sh
(通常放在~/.oh my zsh/oh my zsh.sh
),你很可能没有使用oh my zsh。当然,这并不一定意味着您使用的是“普通”zsh,因为还有其他框架。在大多数情况下,我会说,除非您自己安装,否则您不会使用Oh My Zsh(或其他框架)。如果您忘记了或它不是您自己的机器,唯一可以绝对确定的方法是检查任何和所有zsh配置文件(在您的$HOME
以及/etc
或/etc/zsh
中)。这只适用于Oh My zsh。编辑:哦,是关于我的天啊。。。但这个答案并不能完全满足需求。
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"