Fishの基礎 - 補完

提供: MochiuWiki : SUSE, EC, PCB

2024年10月10日 (木) 22:55時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == Fishシェルの補完システムは非常に強力で柔軟性がある。<br> <br> Fishの補完システムを理解するには、これらの概念を理解して、実際に補完スクリプトを記述することが重要である。<br> また、既存の補完スクリプト (~/.config/fish/completionsディレクトリ) を参考にする。<br> <br> 補完システムの詳細を知りたい場合は、Fishの公式サイトにある[https…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

概要

Fishシェルの補完システムは非常に強力で柔軟性がある。

Fishの補完システムを理解するには、これらの概念を理解して、実際に補完スクリプトを記述することが重要である。
また、既存の補完スクリプト (~/.config/fish/completionsディレクトリ) を参考にする。

補完システムの詳細を知りたい場合は、Fishの公式サイトにあるWriting your own completionsを参照すること。


補完関数

completeコマンドを使用して、補完関数を定義する。

 # 基本構文
 
 complete -c <コマンド> <オプション> -a '<補完候補>' -d '<補完候補の説明>'


  • -c <コマンド>
    補完を定義するコマンドを指定する。
  • -a '<補完候補>' または -a "<補完候補>"
    補完候補を指定する。
  • -d '<補完候補の説明>' または -d "<補完候補の説明>"
    補完候補の説明を提供する。



オプションの補完

コマンドのオプションを補完する場合は、-s (短いオプション)、または、-l (長いオプション) を使用する。

 complete -c cat -s n -l number -d "Enumerate lines"



条件付き補完

Fishでは、条件に基づいて異なる補完を定義することができる。

 if command -q gcc
    complete -c gcc -s O -a "0 1 2 3" -d "Optimization level"
 end



動的補完

補完候補を動的に生成する場合は、コマンド置換を使用する。

 complete -c ssh -a "(command cat ~/.ssh/config | string match -r '^Host\s+(\S+)' | string replace -r '^Host\s+' '')" -d "Known host"



補完スクリプト

複雑な補完ロジックは、別のファイルに記述して、sourceコマンドで読み込むことができる。

 source ~/.config/fish/completions/mycommand.fish



補完の優先順位

-nオプションを使用して、特定の状況下でのみ補完を適用できる。

 complete -c git -n "__fish_use_subcommand" -a clone -d "Clone a repository"



サブコマンドの補完

多くのコマンドはサブコマンドを持つ。
これらは、一般的に、__fish_use_subcommand関数を使用して処理する。

 complete -c git -f -n "__fish_use_subcommand" -a "clone" -d "Clone a repository"


 complete -c git -f -n "__fish_use_subcommand" -a "commit" -d "Record changes to the repository"



組み込み関数

Fishには補完を支援するための多くの組み込み関数がある。

  • __fish_complete_directories
    ディレクトリの補完
  • __fish_complete_path
    ファイルパスの補完
  • __fish_complete_groups
    グループ名の補完



補完の削除

特定のコマンドの全ての補完を削除することができる。

 complete -c <コマンド> -e



補完のテスト

特定のコマンドの補完をテストできる。

 fish_complete_path <コマンド>