如何在单个文件中维护一组 fish 函数?

How can I maintain a collection of fish functions in a single file?

我想定义一些函数,以便在命令行和脚本中使用。一种方法是为每个函数创建一个文件,并将它们存储在 autoloading folder 中(例如 ~/config/fish/functions/one.fish~/config/fish/functions/two.fish、...)

但我不想在自己的文件中维护每个函数。有什么方法可以在单个文件中定义一组函数(这样它们就可以从命令行和多个脚本中引用)?

(或者,fish 遵循强大的设计原则。如果有记录的 fish-was-designed-this-way 原理来为每个用户定义的函数存储一个文件,我希望看到它。)

您可以在一个文件中只包含多个函数,但您只能对其中一个函数使用自动加载。

问题是这样的:如果文件中有一个函数 "foo" 和一个函数 "bar",fish 不先读取文件怎么知道?

对于自动加载,文件以函数命名(例如 "bar" 将存储在 "bar.fish" 中),因此 fish 可以找出它在哪里。

因此,您可以执行以下两项操作之一:

  • 如果总是先调用其中一个函数,那么您可以将其用作文件名并将其存储在函数文件中。使用该函数后,fish 会知道其余的(因为它 sourced 文件)。

  • 如果不是这种情况(或者您不想依赖它),您可以在需要时手动 source 文件(或仅在启动)或将其存储在 ~/.config/fish/conf.d/SOMETHING.fish 中的配置片段中(哪条鱼会 source 在读取 config.fish 之前自动)。

前者表示例如辅助函数可以与主函数一起存储。当您在不使用该函数的情况下加载文件时,后者会稍微慢一点,但除非您过度使用它,否则您甚至不太可能注意到。