如何配置 zsh 以使用驼峰匹配自动完成目录名称?

如何配置 zsh 以使用驼峰匹配自动完成目录名称?

Eclipse 和 Resharper 有一种很好的文件导航方式。

如果我当前目录中有以下文件夹(或文件)

MyReallyLongName
MyReallyLongAndFunName
MyReallyLongAndNotReallyFunName

在 eclipse 中,我只需使用大写字母即可导航到它们。相应地,在 zsh 中,我希望能够输入:

cd MRLAFN(Tab)(Enter)

MyReallyLongAndFunName一步进入

如果我现在想用 zsh 执行此操作,我必须输入My(Tab)Fun(Tab)(Enter)

答案1

这对我有用:

zstyle ':completion:*' matcher-list 'r:[^A-Z0-9]||[A-Z0-9]=** r:|=*' 

然后我可以在测试目录中执行以下操作:

touch MyReallyLongName MyReallyLongAndFunName MyReallyLongAndNotReallyFunName
ls MRLANRFN<TAB>
ls MyReallyLongAndNotReallyFunName

我根据Zshell 用户指南

答案2

_camel_case我通过将一个文件添加到我的个人文件~/.zsh/functions folder(取变量中的任何文件夹$fpath)并包含以下内容来使其“非常好”地工作:

#autoload

[[ -z "$PREFIX" ]] && return 1

relpath=$(dirname $PREFIX)

[[ -e $relpath ]] || return 1

files=$(ls $relpath)

regex=$(echo $(basename $PREFIX) | sed -e 's/\([A-Z][^A-Z]*\)/\1[^A-Z]+/g')

correctedfiles=($(echo $files | grep -P $regex | sed -e :a -e '$!N;s/\n/ /;ta'))

results=($(for file in $correctedfiles; do echo "$relpath/$file"; done))

compadd -U -f -- $results

然后,我在 ~/.zshrc 中添加了以下行

zstyle ':completion:*' completer _complete _correct _path_files _camel_case

请注意,这很可能不是一个“好”的解决方案,因为我对 zsh 的完成系统没有太多了解(我猜只有少数人真正了解),但它确实实现了您在问题中所描述的内容。

相关内容