魚の設定に略語を追加


10

特に既知のbash変数または一般的なgitコマンドのエイリアスに対して、魚のシェルの略語機能を使用したいと思い!!ます。次のスニペットのように略語を追加できることを知っています。

abbr -a gco git checkout

また、この設定はにあるファイルに保存されることも知っていますが.config/fish/fishd.host、このファイルは、変更が失われる可能性があるため(ファイルは自動生成されるため)編集しないように言っています。

私の質問は、ドットファイルをgitリポジトリに配置したいので、この省略形を設定ファイルに追加する方法です。そして、これらのドットファイルを別のマシンで使用する場合、これらすべてのabbrコマンドを再度実行したくないです。


これを行う良い方法を見つけましたか?以下の答えはそれほど有用ではないことに同意します。
ezuk

いいえ、私はまだしませんでした: - /
ダニエル・ロッター

回答:


12

申し訳ありませんが、あなたが何を求めているのか理解できません。ただし、abbr起動時に(およびリポジトリに保存してマシン間で共有できるファイルに)定義を設定する方法が質問の場合は、Bashの~/.config/fish/config.fishFishと同等のファイルを使用する必要があります.bashrc

略語はグローバル/ユニバーサル変数に保存されるため、ターミナルウィンドウを開くたびにリセットする必要はありません。そのため、設定ファイルにセーフガードを設定して、毎回リセットしないようにすることができます(少し高速化)ここで説明されているとおり:https : //github.com/fish-shell/fish-shell/issues/1976#issuecomment-168698602

編集(2019年4月):

Fishがバージョン3.0.0でのユニバーサル変数の保存方法を変更した後、セーフガード機能により、新しいターミナルウィンドウを開いたり、マシンを再起動した後もabbrリストに加えられた変更が含まれなくなります。そのため、これらの行を例から削除しました。

例えば、私のconfig.fishように見える(Gitコマンドの場合):

  echo -n Setting abbreviations... 

  abbr g 'git'
  abbr ga 'git add'
  abbr gb 'git branch'
  abbr gbl 'git blame'
  abbr gc 'git commit -m'
  abbr gca 'git commit --amend -m'
  abbr gco 'git checkout'
  abbr gcp 'git cherry-pick'
  abbr gd 'git diff'
  abbr gf 'git fetch'
  abbr gl 'git log'
  abbr gm 'git merge'
  abbr gp 'git push'
  abbr gpf 'git push --force-with-lease'
  abbr gpl 'git pull'
  abbr gr 'git remote'
  abbr grb 'git rebase'
  abbr gs 'git status'
  abbr gst 'git stash'

  echo 'Done'

1
このおかげで、コードの最初のスニペットの下のドキュメント(fishshell.com/docs/current/commands.html)を読むと、段落は本当にあいまいで、「シェルを遅くする」だけで、これは提供しませんそれと一緒に信じられないほどシンプルな代替手段、再び歓声!
SidOfc

1

これを修正しました!私がやったことは、単に出力をabbr -sFishスクリプトにすることです。だから簡単に:

abbr -s > abbr.fish
(edit abbr.fish, add the following line to the top:) #! /usr/bin/fish
chmod +x abbr.fish

これで完了です!

あなたが今しなければならないことは、あなたがabbr.fishあなたの略語を使いたいと思うどんなFishマシンででも走るだけです、そして、それは予測します。


0

略語は魚の普遍的な変数として保存されるため、私の意見では、お気に入りの拡張を維持するためのクイック&ダーティ ™方法としてインタラクティブに使用するのに適しています。

この設定を他のボックスで利用可能にし、それらをドットファイルと同期させたい場合はgco.fish、代わりに略語ごとになどの関数を作成することをお勧めします。

  • gco.fish

    function gco
        command git checkout $argv
    end
    

関数が遅延し、魚にロードされ、常に実行しているよりも良好に機能しますabbr(もしているではない魚の組み込みが、定義との定期的な機能type abbrあなたの各略語のため)config.fish


1
しかし、この方法でエイリアスは略語のように自動的に展開しませんか?それは略語についての最もクールなもののようなものです;-)
ダニエルロッテル

はい。それで合っています。それは小さなトレードオフです。私は個人的にはabbrを使用しません。それらはユニバーサル変数とそれらを使用して実装されているためです。
ホルヘブカラ16年

3
もう一つの欠点は、自動補完はもう私のために動作しないこと...型付けがあるgco <tab> ...もう枝が表示されない
ダニエル・ロッター

@DanielRotter関数が補完を自動的に継承できれば、それはあまりにも良いことです。しかし、良いニュースは、complete既存のgit補完を各関数にコピーするために使用することはまったく難しくないということです。「git aliases」用のディレクトリ、各関数用のfunctionsディレクトリ、および補完を追加するための補完ディレクトリが必要です。理想的には各機能にも1つですが、必ずしもそうではありません。
ホルヘブカラ

これは答えですが、前述のコメント(たとえば、略語を使用するものを壊すなど)があるため、私もこれを選択しないと言わなければなりません。また、completeシェルを設定するほとんどのユーザーは、使用することに煩わされることを望みません。それほど些細なことではなく、ドキュメント(すべてのIMOをクリアするわけではありません)を読んで、完了を「ポリフィル」したいプログラムを学習する必要があります(最初に想像するよりもある程度)。また、更新はどうですか?すべてのカスタム完了を最新の状態に保つことも楽しくありません:)
SidOfc

0

私は再び魚を試してみましたが、今私のために働いている解決策を見つけました。魚のドキュメントにもそのように記載されています

彼らは単にリセットしてfish_user_abbreviations 、何abbr度も何度も電話することを提案します。(私ifも私のケースでは使用しませんでした、またうまくいきます)

if status --is-interactive
    set -g fish_user_abbreviations
    abbr --add first 'echo my first abbreviation'
    abbr --add second 'echo my second abbreviation'
    # etcetera
end

実際にはMJVが提案したものと似ていますが、キャッシュされるというマイナス面はありません。トレードオフはおそらくスタートアップが少し遅いということですが、私はそれを監視し続けます。ドキュメントにも記載されているので、このバリアントを使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.