10 votes

Comment configurer zsh pour qu'il complète automatiquement les noms de répertoires avec des minuscules et des majuscules ?

Eclipse et Resharper ont une façon agréable de naviguer dans les fichiers.

Si j'ai les dossiers (ou fichiers) suivants dans mon répertoire courant

MyReallyLongName
MyReallyLongAndFunName
MyReallyLongAndNotReallyFunName

Dans Eclipse, je peux y accéder en utilisant uniquement les lettres en majuscules. De même, dans zsh, je veux pouvoir taper :

cd MRLAFN(Tab)(Enter)

Pour entrer dans MyReallyLongAndFunName en une seule étape

Si je veux faire cela avec zsh maintenant, je dois taper My(Tab)Fun(Tab)(Enter)

8voto

user1065745 Points 116

Cela fonctionne pour moi :

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

Je peux alors le faire dans un répertoire de test :

touch MyReallyLongName MyReallyLongAndFunName MyReallyLongAndNotReallyFunName
ls MRLANRFN<TAB>
ls MyReallyLongAndNotReallyFunName

Je l'ai élaboré en m'inspirant des conseils de la Guide de l'utilisateur Zshell .

2voto

tobi_p Points 21

J'ai réussi à faire fonctionner cela "assez bien" en ajoutant un fichier _camel_case à mon personnel ~/.zsh/functions folder (prenez n'importe quel dossier qui se trouve dans votre $fpath ) avec le contenu suivant :

#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

Ensuite, j'ai ajouté la ligne suivante à mon ~/.zshrc

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

Notez que ce n'est probablement pas une "bonne" solution car je n'ai pas beaucoup de connaissances sur le système de complétion de zsh (seules quelques personnes en ont, je suppose), mais cela fait exactement ce que vous décrivez dans votre question.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X