Yash マニュアル: complete 組込みコマンド
Author: magicant
Description: Yash の complete 組込みコマンドについて

# Complete 組込みコマンド

Complete 組込みコマンドはコマンドライン補完において補完候補を生成します。この組込みコマンドは補完関数の実行中にだけ使えます。

## 構文

- `complete [-A パターン] [-R パターン] [-T] [-P 接頭辞] [-S 接尾辞] [-abcdfghjkuv] [[-O] [-D 説明] 単語…]`

## 説明

補完関数の中でこの組込みコマンドを実行すると、complete コマンドは指定した引数に従って補完候補を生成します。どのオプション・オペランドで候補を生成するにせよ、実際に生成される候補は現在補完しようとしている (コマンドライン上に途中まで入力された) 単語に一致するものに限られます。

## オプション

`-A パターン`, `--accept=パターン`
  このオプションを指定すると、指定したパターンにマッチする候補だけを生成します。このオプションは複数回指定できます (指定した全てのパターンにマッチする候補だけを生成します)。
`-D 説明`, `--description=説明`
  このオプションを指定すると、このオプションで指定した説明が補完の際に候補の説明として表示されます。
`-O`, `--option`
  生成する候補をコマンドのオプションとみなすようにします。候補を画面上に一覧表示する際に自動的に先頭にハイフンを付加します。
`-P 接頭辞`, `--prefix=接頭辞`
  このオプションで指定する接頭辞は現在補完しようとしている単語の接頭辞になっていなければなりません。このオプションを指定すると、候補生成の際にこのオプションで指定した接頭辞を無視してマッチングを行います。例えば補完しようとしている単語が `file:///home/user/docume` であり、この URL をファイル名として補完したいとしましょう。この場合は、`complete -P file:// -f` とすると URL から `file://` を除いた残りの `/home/user/docume` の部分に対してファイル名としての補完候補が生成されます。
`-R パターン`, `--reject=パターン`
  このオプションを指定すると、指定したパターンにマッチする候補を生成しません。このオプションは複数回指定できます (指定したパターンの少なくとも一つにマッチする候補を全て除外します)。
`-S 接尾辞`, `--suffix=接尾辞`
  生成した各候補の末尾に接尾辞を付加します。
`-T`, `--no-termination`
  通常は、補完が終わった後に次の単語をすぐ入力できるように、補完した単語の直後に空白を自動的に挿入しますが、このオプションを指定したときは空白を挿入しません。

### 補完方式設定のためのオプション

以下のオプションは、生成する候補の種類を指定します。

`-a`, `--alias`
  エイリアス (`--normal-alias --global-alias` に同じ)
`--array-variable`
  配列
`--bindkey`
  Bindkey コマンドで利用可能な行編集コマンド
`-b`, `--builtin-command`
  組込みコマンド (`--special-builtin --semi-special-builtin --regular-builtin` に同じ)
`-c`, `--command`
  コマンド (`--builtin-command --external-command --function` に同じ)
`-d`, `--directory`
  ディレクトリ
`--executable-file`
  実行可能ファイル
`--external-command`
  外部コマンド
`-f`, `--file`
  ファイル (ディレクトリ含む)
`--finished-job`
  終了したジョブのジョブ ID
`--function`
  関数
`--global-alias`
  グローバルエイリアス
`-g`, `--group`
  (ファイルのパーミッションなどにおける) グループ
`-h`, `--hostname`
  ホスト名
`-j`, `--job`
  ジョブ ID
`-k`, `--keyword`
  シェルの予約語
`--normal-alias`
  通常の (グローバルでない) エイリアス
`--regular-builtin`
  通常の組込みコマンド
`--running-job`
  実行中のジョブのジョブ ID
`--scalar-variable`
  (配列を除いた通常の) 変数
`--semi-special-builtin`
  準特殊組込みコマンド
`--signal`
  シグナル
`--special-builtin`
  特殊組込みコマンド
`--stopped-job`
  停止中のジョブのジョブ ID
`-u`, `--username`
  ユーザのログイン名
`-v`, `--variable`
  変数

`-d` (`--directory`) オプションを指定せずに `-f` (`--file`) オプションを指定した場合、`-S …` (`--suffix=…`) オプションの指定の有無にかかわらず、ディレクトリ名を表す補完候補には接尾辞としてスラッシュが付き、候補の直後には空白が入りません。

ジョブ ID の補完は先頭の `%` を除いた部分に対して行われるので、補完しようとしている単語が既に `%` を含んでいる場合は `%` を接頭辞として指定してください。

## オペランド

Complete コマンドのオペランドは、各オペランドがそれぞれ補完候補として扱われます。指定したオペランドのうち、現在補完しようとしている単語に合うものが補完候補となります。

## 終了ステータス

候補が少なくとも一つ生成できた場合は、終了ステータスは 0 です。新たな候補が一つも生成できなかったときは、終了ステータスは 1 です。その他のエラーの場合は 2 以上の終了ステータスになります。

## 補足

POSIX には complete コマンドに関する規定はありません。