J'utilise zsh avec le fichier rc de oh-my-zsh et il y a un comportement que je trouve particulièrement ennuyeux. Par défaut, oh-my-zsh est configuré pour renvoyer des correspondances insensibles à la casse lors de la saisie automatique. Ce comportement est parfois bon, mais parfois il est vraiment nul. Existe-t-il un moyen de configurer zsh pour utiliser uniquement la correspondance insensible à la casse lorsqu'il n'y a pas de correspondance sensible à la casse?
Par exemple, ce cas utiliserait une correspondance sensible à la casse:
> ls
LICENSE.txt lib/
> emacs l <-- should autocomplete to lib/
Dans ce cas, une auto-complétion insensible à la casse se produirait:
> ls
README lib/
> emacs r <-- should autocomplete to README
Merci!
Décommentez simplement la ligne suivante dans ~/.zshrc:
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
Ça a marché pour moi
Créez un fichier ~/.oh-my-zsh/custom/better-completion.zsh
(En supposant que vous utilisez des chemins par défaut pour oh-my-zsh) avec les lignes suivantes
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
Explication:
Les règles pour les correspondances en complétion zsh en général sont définies dans le style matcher-list
. Pour oh-my-zsh, cela est défini dans ~/.oh-my-zsh/lib/completion.zsh
(Une fois pour la casse et une pour la casse). Vous pouvez le changer ici, mais il disparaîtrait probablement si vous mettiez à jour votre oh-my-zsh. ~/.oh-my-zsh/custom
Est spécifiquement destiné à la personnalisation et les fichiers avec l'extension .zsh
Sont chargés à partir de là par .oh-my-zsh/oh-my-zsh.sh
À la fin de la configuration.
Les paramètres par défaut (insensibles à la casse) pour matcher-list
Dans oh-my-zsh sont:
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
Le premier indique comment manipuler les majuscules et les minuscules interchangeables. Comme il s'agit de la première règle, elle sera invariablement utilisée pour chaque match.
La seule modification nécessaire consiste à ajouter ''
Pour une complétion simple (c'est même le premier exemple dans zshcompsys(1)
pour matcher-list
)
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
Cela essaie d'abord de terminer le mot actuel exactement tel qu'il est écrit, avant d'essayer des correspondances insensibles à la casse ou autres.
Pour être complet:
.
, _
Ou -
, Par ex. f.b
-> foo.bar
.bar
-> foobar
)