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 的完成系统没有太多了解(我猜只有少数人真正了解),但它确实实现了您在问题中所描述的内容。