complete - コマンドのタブ補完を編集する

概要

complete ((-c | --command) | (-p | --path)) COMMAND [OPTIONS] [--color WHEN]
complete (-C | --do-complete) [--escape] STRING

説明

complete は、コマンドの補完を定義、削除、または一覧表示します。

独自の補完を作成するための入門ガイドについては、fish マニュアルの 独自の補完を作成する を参照してください。

以下のオプションが利用可能です:

-c--command COMMAND

COMMAND がコマンド名であることを指定します。 -c-p が指定されていない場合、最初のオプション以外の引数がコマンドとして使用されます。

-p--path COMMAND

COMMAND がコマンドの絶対パス(任意でワイルドカードを含む)であることを指定します。

-e--erase

指定された補完を削除します。

-s--short-option SHORT_OPTION

補完リストにショートオプションを追加します。

-l--long-option LONG_OPTION

補完リストに GNU 形式のロングオプションを追加します。

-o--old-option OPTION

旧形式のショートまたはロングオプションを追加します(詳細は後述)。

-a--arguments ARGUMENTS

指定されたオプション引数を補完リストに追加します。

-k--keep-order

アルファベット順にソートせず、 ARGUMENTS の順序を維持します。 -k を指定して complete を複数回呼び出した場合、後の呼び出しで指定された引数が先に表示されます。

-f--no-files

この補完の後にファイル名を続けないようにします。

-F--force-files

他の適用可能な complete--no-files が指定されている場合でも、この補完の後にファイル名を続けられるようにします。

-r--require-parameter

この補完にはオプション引数が必須であることを示します。つまり、別のオプションを直後に続けることはできません。これは、次の引数がそのオプションの引数として扱われることを意味します。これが指定されていない場合、オプション引数は -xFoo--color=auto のように連結して指定する必要があります。

-x--exclusive

-r-f の短縮形です。

-d--description DESCRIPTION

補完ペイジャーに表示される、この補完の説明を追加します。

-w--wraps WRAPPED_COMMAND

指定されたコマンドに WRAPPED_COMMAND から補完を継承させます。これは「このコマンドはあのコマンドと同じように補完する」といった関係を定義するのに使われます。詳細は後述します。

-n--condition CONDITION

CONDITION (シェルコマンド)が 0 を返す場合にのみ、この補完を使用するようにします。これにより、特定の条件下でのみ有効な補完を指定できます。複数の条件が指定された場合、fish は指定された順に条件を試し、失敗するかすべて成功するまで評価を続けます。

-C--do-complete STRING

指定された文字列に対して、可能なすべての補完候補を検索します。 STRING が指定されていない場合は、現在のコマンドラインが代わりに使用されます。

--escape

-C と併用した場合、補完候補内の特殊文字をエスケープします。

--color WHEN

補完結果を表示する際に、構文ハイライトの色を使用するタイミングを制御します。 WHEN には、 auto (デフォルト。出力先が 端末 の場合に色付け)、 always 、または never を指定できます。

-h--help

このコマンドの使用方法に関するヘルプを表示します。

fish におけるコマンド固有のタブ補完は、オプションと引数の概念に基づいています。オプションとは、 -h-help--help のようにハイフンで始まるパラメータのことです。引数とは、ハイフンで始まらないパラメータのことです。Fish は、GNU getopt ライブラリと同じ 3 つの形式のオプションを認識します。それらの形式は以下の通りです:

  • ショートオプション(例: -a)。ショートオプションは 1 文字の長さで、単一のハイフンが前に置かれます。これらはまとめてグループ化できます(例: -la-l -a と等価です)。オプション引数は、オプションの直後に値を付けるか(-w32)、 --require-parameter が指定されている場合は次のパラメータ(-w 32)として指定します。

  • 旧形式のオプション(例: -Wall-name のような長いもの、あるいは -a のような短いもの)。旧形式のオプションは 2 文字以上の長さにすることができ、単一のハイフンが前に置かれますが、グループ化はできません。オプション引数は、デフォルトではスペースに続く形式(-foo null)か、 = の後の形式(-foo=null)で指定します。

  • GNU 形式のロングオプション(例: --colors)。GNU 形式のロングオプションは 2 文字以上の長さで、2 つのハイフンが前に置かれ、グループ化はできません。オプション引数は、 = の後に指定するか(--quoting-style=shell)、 --require-parameter が指定されている場合は次のパラメータ(--quoting-style shell)として指定します。

1 回の呼び出しで複数のコマンドやパスを指定して、複数のコマンドに対して同じ補完を定義できます。

1 回の呼び出しで複数のコマンドスイッチやラップされたコマンドを指定して、複数の補完を定義することもできます。

同じコマンドに対して complete を複数回呼び出すと、既存の定義の上に新しい定義が追加されます。

-a--arguments がロング、ショート、または旧形式のオプションと組み合わせて指定された場合、指定された引数は、それらのオプションの引数としてのみ補完されます。-a--arguments がどのオプション形式とも組み合わせずに指定された場合、指定された引数は、そのコマンドのオプション以外の引数を補完する際に使用されます(-r--require-parameter で指定されたオプション引数を補完する場合を除きます)。

ARGUMENTS 内のコマンド置換は、改行区切りの引数リストを返す必要があります。各引数には、オプションとしてタブ文字に続いて引数の説明を付けることができます。この方法で指定された説明は、 -d--description で指定された説明よりも優先されます。

--description で指定された説明は、 -s-o 、または -l で指定されたオプションをグループ化するためにも使用されます。同じ(空ではない)説明を持つオプションは 1 つの候補としてリストされ、そのうちの 1 つが選択されます。説明が空であるか、説明が指定されていない場合、この処理はスキップされます。

-w--wraps オプションは、指定されたコマンドに別のコマンドの補完を継承させ、そのコマンドを「ラップ(包摂)」します。ラップする側のコマンドに、独自の補完を追加することも可能です。1 つのコマンドで複数のコマンドをラップでき、ラップ関係は推移的です(A が B をラップし、B が C をラップしている場合、A は自動的に C のすべての補完を継承します)。ラップ設定は、 -e--erase オプションを使用して削除できます。ラップ機能は -c--command で指定された補完に対してのみ機能し、 -p--path で補完を指定した場合は無視されます。

補完を削除する際、 complete -c COMMAND -e を指定して特定のコマンドのすべての補完を削除することも、特定の補完オプションを指定して削除することも可能です。

補完の定義や削除を行う引数(オプション、引数、ラップ設定など)なしで complete を呼び出すと、代わりに一致する補完を表示します。したがって、引数なしの complete はロード済みのすべての補完を表示し、 complete -c foofoo 用のロード済み補完をすべて表示します。補完は 自動ロード (autoload) されるため、表示させるにはまずその補完をトリガー(実行)する必要があります。

Cygwin / MSYS2 / Windows

Windows ではバイナリ実行ファイルに .exe 拡張子が付きますが、アプリケーションを呼び出す際にこの拡張子は必須ではありません(名前が曖昧でない場合、つまり myprog.exe と同じディレクトリに myprog という名前のスクリプトが併存しない場合に限ります)。

Windows と他の OS 間で補完を統一するため、Cygwin/MSYS2/Windows では COMMAND.exe 拡張子を付ける必要はありません。 myprog 用の補完は、曖昧さがない場合(つまり myprog.exe 専用の補完が別に存在しない場合)、 myprog.exe に対しても使用されます。ただし、 myprog.exe 用に定義された補完は、コマンドラインで拡張子付きの .exe を使用した場合にのみ適用されます。

言い換えれば:

complete -c myprog.exe ...  #1

myprog.exe に対してのみ機能します

complete -c myprog ...  #2

myprogmyprog.exe の両方に対して機能します。ただし、両方の補完定義が存在する場合、#2 は myprog にのみ使用され、 myprog.exe には #1 が使用されます。

gcc コマンドのショート形式オプション -o には、ファイルの引数が必要です:

complete -c gcc -s o -r

grep コマンドのショート形式オプション -d には、 read, skip, recurse のいずれかが必要です:

complete -c grep -s d -x -a "read skip recurse"

su コマンドは任意のユーザー名を引数に取ります。ユーザー名は /etc/passwd ファイルのコロン区切りの最初のフィールドに記述されています。これは次のように指定できます:

complete -x -c su -d "Username" -a "(cat /etc/passwd | cut -d : -f 1)"

rpm コマンドにはいくつかの異なるモードがあります。 -e--erase フラグが指定されている場合、 rpm は 1 つ以上のパッケージを削除するはずです。その場合、 nodeps スイッチなど、パッケージ削除に関連するいくつかのスイッチが有効になります。

これは次のように記述できます:

complete -c rpm -n "__fish_contains_opt -s e erase" -l nodeps -d "Don't check dependencies"

ここで、 __fish_contains_opt はコマンドラインバッファをチェックして、指定された一連のオプションが存在するかどうかを確認する関数です。

エイリアスを実装するには、 -w--wraps オプションを使用します:

complete -c hub -w git

これで hub は git からすべての補完を継承します。これは関数の宣言内でも指定できることに注意してください(例: function thing -w otherthing)。

complete -c git

git に関するすべての補完を表示します。

複数のショートオプションを 1 つの文字列にまとめること(-x -f の短縮形としての -xf など)や、ショートオプションとその値を連結すること(-d 9 の代わりの -d9 など)をサポートしていないコマンド foo がある場合、それらはショート形式オプションではなく、1 文字の旧形式オプションとして指定する必要があります。たとえば、 complete -c foo -o s; complete -c foo -o v と定義した場合、 foo -ov という形は提案されず、 foo -o -v と提案されるようになります。