単一のスクリプトに複数の魚機能を追加するには?

単一のスクリプトに複数の魚機能を追加するには?

zshからFishに切り替えようとしています。ご覧のとおり、魚を使用すると魚の読み込み時間が長くなります。ニックネーム。したがって、すべてのエイリアスを関数に変換したいのですが、問題は、各エイリアスの関数スクリプトを作成するのが少し忙しいということです。それでは、単一の関数スクリプトにこれらのエイリアスをどのように追加しますか?

答え1

まず、aliasフィッシュのコマンドは、わずかな構文の砂糖を使って関数を生成するショートカットです。例えば

> alias ls "ls -lh"
> functions ls
# Defined via `source`
function ls --description 'alias ls ls -lh'
 command ls -lh $argv;
end

おそらく、生成/ロードされる関数のオーバーヘッドが速度低下を引き起こす可能性があります。この場合、起動時に(まだ)ロードされる単一のモノリシックファイルにすべて入れることは役に立ちません。

修正を含まないいくつかの簡単な解決策がありますconfig.fish

  • 各エイリアスに対してfuncsave <aliasname>関数を~/.config/fish/functionsこれこそが正しいことです。、IMHO、そのディレクトリの機能は次のとおりです。リクエストに応じてロード、始まりではありません。これにより、シェルの開始時間が最も速くなります。

    たとえば、

    > alias ls "ls -lh"
    > funcsave ls
    > ls -n ~/.config/fish/functions/
    -rw-r--r-- 1 1000 100  95 Aug 18 14:30 ls.fish
    

    繰り返しますが、このファイルは起動時にも触れません。必要に応じて「遅延ロード」されます。 Fishは、lsセッションで初めて関数を呼び出すときにls関数を実行します~/.config/fish/functions/ls.fish

    またはちょうどfuncsaveオン既存のニックネーム。新しいエイリアスを定義するときに自動的alias -sに生成された.lazy-load関数ファイルを使用するだけです~/.config/fish/functions

  • 編集/更新: できるだけ簡単にしたいと言いましたが、ここにすべてのエイリアス機能を自動的に保存するためのクイックコマンドラインがあります。実行後、各エイリアスに対応するファイルが表示され、~/.config/fish/functions起動時に既存のエイリアスを削除できます。

    for f in (alias | awk '{print $2}'); funcsave $f; end
    
  • エイリアス関数用のモノリシックファイルを作成したいので、開始時間を長くしても問題ない場合は(ある程度)変更しないでください~/.config/fish/config.fish。ファイルを作成すると、次~/.config/fish/conf.dのように自動的に読み込まれます。開始の一部。

    一部の手順を変更する必要がある場合は、代わりにconfig.fishファイルを使用することをお勧めしますconf.d。個別config.fish

答え2

ベーススタックオーバーフローの例渡す面白い魚、関数が定義されたファイルを以下~/.config/fish/に作成し、そのファイル~/.config/fish/config.fishにその関数をインポートする行を追加することをお勧めします。

コンテンツの例~/.config/fish/all-my-functions.fish:

function example-function1
  ls -l $argv
end

function example-function2
  ls -a $argv
end

# continues as needed ...

ヘキシング~/.config/fish/config.fish:

source ~/.config/fish/all-my-functions.fish

あるいは、すべての機能をconfig.fishファイルに直接定義することもできます。

関連情報