2017-09-26 4 views
1

Je veux définir un certain nombre de fonctions à utiliser à partir de la ligne de commande et dans les scripts. Une façon serait de créer un fichier pour toutes les fonctions et les stocker dans le autoloading folder (par exemple ~/config/fish/functions/one.fish, ~/config/fish/functions/two.fish, ...)Comment puis-je conserver une collection de fonctions poisson dans un seul fichier?

Mais je ne veux pas de maintenir chaque fonction dans son propre fichier. Est-il possible de définir une collection de fonctions dans un seul fichier (de sorte qu'elles peuvent être référencées à partir de la ligne de commande et de plusieurs scripts)?

(Le poisson est également guidé par des principes de conception rigoureux.S'il existe une raison documentée pour stocker un fichier par fonction définie par l'utilisateur, j'aimerais le voir.)

Répondre

3

Vous pouvez avoir plusieurs fonctions dans un seul fichier, mais vous ne pouvez utiliser que le chargement automatique pour l'un d'entre eux.

Le problème est le suivant: Si vous avez une fonction "foo" et une fonction "barre" dans un fichier, comment le poisson est-il censé le savoir, sans avoir d'abord lu le fichier?

Pour le chargement automatique, le fichier est nommé après que la fonction (par exemple "bar" soit stockée dans "bar.fish"), afin que le poisson puisse déterminer où il se trouve.

Ainsi, vous pouvez faire une des deux choses:

  • Si l'une des fonctions est toujours appelée d'abord, vous pouvez l'utiliser comme nom de fichier et le stocker dans un fichier de fonction. Une fois que vous avez utilisé cette fonction, le poisson connaît le reste (puisqu'il est source d le fichier). Si ce n'est pas le cas (ou si vous ne voulez pas compter dessus), vous pouvez source le fichier manuellement quand vous en avez besoin (ou juste une fois au démarrage) ou le stocker dans un extrait de configuration dans ~/.config/fish/conf.d/SOMETHING.fish (qui pêchera automatiquement source juste avant de lire config.fish).

La première signifie que, par ex. fonctions auxiliaires peuvent être stockés avec le principal. Ce dernier est un peu plus lent quand vous chargez le fichier sans utiliser la fonction, mais à moins que vous ne l'utilisiez trop, vous ne le remarquerez probablement pas.

+1

J'utilise essentiellement cette dernière stratégie. J'ai mes configs en git qui est cloné sur plusieurs machines. Dans mon config.fish j'ai 'source config.fish. (Hostname)', et je peux avoir différentes fonctions, fish_user_path, etc pour chaque boîte. –