Dans zsh
, la cd
commande a une forme à deux arguments: cd OLD NEW
devient ${PWD/OLD/NEW}
. Avec le système d'achèvement de nouveau style, zsh est capable de terminer NEW
: le deuxième argument est complété en fonction de ce qui OLD
peut être remplacé par pour obtenir un répertoire existant. Mais le premier argument n'est complété que pour les répertoires existants.
Comment puis-je demander à zsh de proposer des complétions qui sont des valeurs possibles pour OLD
, en plus de compléter les répertoires existants?
Par exemple, si le répertoire actuel est /path/to/foo
et qu'il existe également des répertoires /also/to/foo
et /path/to/foo/prime
, puis se cd p
Tabtermine p
par prime
. Si j'ai l'intention de courir, cd path also
j'aimerais que zsh propose également path
un achèvement. Comment?
L'utilisation de valeurs déjà saisies du deuxième argument pour limiter les possibilités du premier argument serait un plus, mais compléter le premier argument indépendamment serait également très bien.
la source
cd p also <Tab>
oucd p also <left arrow x 5> <Tab>
?cd p also<Left*5><Tab>
: si j'appuie<Tab>
alors que le curseur est en placealso
, je m'attendsalso
à ce que ce soit terminép
.cd t<tab>
devrait-il offrirth/to/foo/prime
etto/foo/prime
? Ou devrait-il simplement se limiter aux limites des répertoires?Réponses:
Je suppose que vous pourriez ajouter les composants de
$PWD
à lacd
liste d'achèvement, bien que cela semble nécessiter de jouer avec_cd
; c'est-à-dire qu'une version personnalisée de_cd
doit apparaître en premier dans$fpath
.Puis en haut de l'
~/zcomp/_cd
ajout d'une fonctionpuis juste avant la
_alternative
ligne, ajoutez ce qui renvoie à la liste des alternativesbien que cela ajoute toujours les
pwd
composants auxcd
compléments:avec une logique supplémentaire, vous ne pouvez ajouter les
$PWD
composants que lorsqu'un deuxième argument est déjà présent au lieu de toujours.Toutefois! Cela gâche toujours l'
cd
achèvement et nécessite que nous réparions l'_cd
achèvement en amont . Une autre option serait de créer un nouveau nom pour la fonction fournie par le double argumentcd
, peut-être appelécdsub
, et de ne fairePWD
apparaître que l'achèvement des composants pour cela. Ajoutez ceci à~/.zshrc
Et puis un
_cd
achèvement_cdsub
vidé pour être placé quelque part dans$fpath
:la source