Je souhaite une exécution floue insensible à la casse pour les fichiers et répertoires dans zsh
. Après avoir lu le manuel pendant quelques heures, voici ce que j'ai trouvé:
zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
De plus, je veux appuyer TAB
une fois pour afficher les achèvements possibles, ne modifiant ce que j'ai tapé que s'il y a exactement un achèvement. Ensuite, TAB
une deuxième pression devrait me mettre en mode "achèvement de menu". Sur la base des manuels, j'ai trouvé ceci:
zstyle ':completion:*' menu select
Maintenant, tout fonctionne comme il se doit, sauf dans une circonstance. J'ai deux dossiers Desktop
et .rstudio-desktop
dans mon répertoire personnel. Depuis que je l'ai setopt globdots
, je m'attends à taper ce qui suit:
$ cd ~/dktop<TAB>
pour laisser mon commandement tel qu'il est entré et afficher comme candidats à l'achèvement Desktop
et .rstudio-desktop
. Au lieu de cela, il supprime dktop
, me laissant avec ce qui suit:
$ cd ~/
J'ai regardé tous les manuels, guides, questions Stack Exchange pertinents et diverses autres sources. Mais quoi que je fasse, je ne peux pas faire fonctionner ça.
Fait intéressant, cependant, si je suis dans le répertoire personnel et que je tape ce qui suit, tout fonctionne comme prévu:
$ cd dktop<TAB>
Autrement dit, ce n'est qu'un problème avec les segments de chemins non principaux (et vous pouvez voir avec C-x h
cela que cela correspond à la directories
balise plutôt qu'à la local-directories
balise utilisée).
Pour une reproductibilité facile, voici un ~/.zshrc
qui reproduira la situation et le comportement décrits ci-dessus (testé sur une nouvelle machine virtuelle El Capitan avec zsh
de Homebrew).
la source
zsh 5.3.1
leArch Linux
.cd ~/dktop<tab>
rendementscd ~/Desktop
.zsh 5.3.1
OS X, le problème se reproduit. Il est intéressant de noter qu'il existe une différence entre les systèmes d'exploitation.Réponses:
Une solution possible est de faire:
Cela entraînera l'extension
~/
de l' onglet jusqu'au chemin absolu.la source
cd /Users/raxod502/dktop
et l'achèvement est désactivé.~/
sur son chemin absolu, l'achèvement flou commencerait à fonctionner. Cela semblait être l'un de ces cas où le problème est qu'il l'évalue une fois mais que vous en avez réellement besoin pour évaluer deux fois pour fonctionner, donc avoir le chemin absolu au lieu de~/
signifierait qu'il ne faudrait plus qu'une seule évaluation. Mais merde, je suis désolé, j'ai oublié que bindkey remplace les anciennes liaisons, et je ne trouve rien qui dise s'il est même possible de lier deux fonctions à une seule clé. Sans ma clé de raccourci, votre achèvement fonctionne-t-il comme prévu lorsque vous disposez de chemins absolus?~/dktop
ou/Users/raxod502/dktop
; le résultat est le même, à savoir qu'ildktop
est supprimé lorsque j'appuie sur TAB.