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ファイルに直接定義することもできます。