Parfois, je veux un nom de fichier à la place de ce que zsh devine pour moi. Par exemple, j'ai un fichier PNG sans un suffixe .png
correct, ce qui fait que zsh pense que ce n'est pas une image et ne la liste pas quand je tape Tab
pour compléter les arguments de display
. Je me demande s'il y a une séquence de touches qui se termine pour un nom de fichier quel que soit le contexte, comme ^XC
pour _correct_filename
, ou comment configurer zsh pour faire la chose?lier la clé pour compléter le nom de fichier où le contexte est dans Zsh
5
A
Répondre
7
Vous pouvez ajouter une clé de liaison à faire ce que vous voulez:
zle -C complete complete-word complete-files
bindkey '^X\t' complete
complete-files() { compadd - $PREFIX* }
Edit: Ajouté $PREFIX
Vous pouvez ajouter ces lignes à votre fichier ~/.zshrc
.
qui fait la liste de tous les fichiers d'achèvement lorsque vous appuyez sur Ctrl - xTab à chaque étape au lieu de Tab. Vous pouvez choisir une autre combinaison de touches qui vous convient.
Ou faire ImageMagick achèvements comprennent toujours tous les fichiers, essayez d'édition (faire une première sauvegarde) le fichier /usr/share/zsh/functions/Completion/Unix/_imagemagick
(ou similaire) et changer cela pour commenter la ligne existante qui commence par _files
et ajouter le nouveau montré:
if (($#)); then
# _files "[email protected]" -g "*.(#i)(${~formats//:/|})(-.)"
_files "[email protected]"
return
fi
Utile mais pas très idéal. La fonction 'complete-files' ne peut que compléter les fichiers sous le répertoire courant. J'ai essayé '_files' à la place mais j'ai obtenu une erreur' (eval): 1: aucune correspondance trouvée: *: all-files'. Y a-t-il un moyen de le faire se comporter comme si vous complétiez après 'cat'? Je veux que cela se termine non seulement pour 'display', donc ce dernier ne convient pas à ma situation. – lilydjwg
@lilydjwg: Je ne comprends pas. Pour moi, les fonctions complete-files avec terminer pour afficher de la même façon que l'achèvement normal fonctionne pour chat (sauf les suffixes de type de fichier tels que "@" et "*" ne sont pas ajoutés. Je ne reçois que des fichiers dans le répertoire courant –
Je veux dire, si je tape un chemin (par exemple ./ ou ../ ou abc /, avec '/' dans ce que j'ai tapé) et puis déclenche la fonction, rien ne sera – lilydjwg