Como o zsh pode ser configurado para autocompletar o nome do diretório com a correspondência do camelcase?

8

O Eclipse e o Resharper têm uma boa maneira de navegar pelos arquivos.

Se eu tiver as seguintes pastas (ou arquivos) no meu diretório atual

MyReallyLongName
MyReallyLongAndFunName
MyReallyLongAndNotReallyFunName

No eclipse, posso navegar até eles usando apenas as letras maiúsculas. Correspondentemente, em zsh, quero poder digitar:

cd MRLAFN(Tab)(Enter)

Para entrar em MyReallyLongAndFunName em uma etapa

Se eu quiser fazer isso com o zsh agora, tenho que digitar My(Tab)Fun(Tab)(Enter)

    
por Rohit Manokaran 28.02.2012 / 06:14

2 respostas

5

Isso funciona para mim:

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

Então eu posso fazer isso em um diretório de teste:

touch MyReallyLongName MyReallyLongAndFunName MyReallyLongAndNotReallyFunName
ls MRLANRFN<TAB>
ls MyReallyLongAndNotReallyFunName

Usei as dicas do Guia do usuário do Zshell .

    
por 01.05.2013 / 18:49
2

Eu consegui que isso funcionasse "muito bem" adicionando um arquivo _camel_case ao meu pessoal ~/.zsh/functions folder (pegue qualquer pasta que esteja na sua variável $fpath ) com o seguinte conteúdo:

#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]*\)/[^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

Em seguida, adicionei a seguinte linha ao meu ~ / .zshrc

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

Note que isso provavelmente não é uma solução "boa" porque eu não tenho muito conhecimento do sistema de conclusão do zsh (apenas algumas pessoas realmente têm, eu acho), mas ele faz exatamente o que você descreveu na sua pergunta .

    
por 02.03.2012 / 17:55