コマンド候補
コマンド候補は、通常のターミナルセッションで入力している間に、シェル自体の補完定義から取得した候補の一覧を表示する機能です。コマンドはターミナルの通常の入力行に残り、候補を選ぶとテキストが挿入されますが、コマンドは実行されません。この機能は AI モデルを使いません。
コマンド候補は macOS と Linux で使えます。Windows では、現在この機能はオフになっています(後述の「Windows」の節を参照してください)。
設定と操作
「設定」▸「ターミナル」▸「コマンドの補完候補」には、3つのモードがあります。
- 自動表示(デフォルト):VelaTerm は入力を約 25 ms まとめてから、シェルに候補を問い合わせます。入力を続けても、この待ち時間はやり直しになりません。問い合わせの処理中に入力を続けた場合は、最新の入力だけを次の問い合わせに使い、古くなった結果は破棄します。完全に一致する候補も一覧に残ります。
- Tab で表示:Tab キーを押したときだけ候補を表示します。
- オフ:候補の一覧は表示されず、Tab キーはシェル本来の動作のままです。
変更は開いているターミナルにすぐ反映され、同じ VelaTerm バックエンドに接続しているすべてのクライアントで共有されます。
キーとマウスの操作は次のとおりです。
- ↑ キーと ↓ キーで候補を選びます。長い一覧では、Page Up キーと Page Down キーで移動できます。
- Tab キーを押すか、マウスでクリックすると、選んだ候補が挿入されます。
- Enter キーは常にシェルに渡され、候補を適用せずに、入力したとおりのコマンドを実行します。
- Esc キーで一覧を閉じます。
- Ctrl+Space で、候補を手動で要求します。
- 選択をそれ以上動かせないときは、↑ キーと ↓ キーの操作がシェルに渡されます。そのため、最初の候補で ↑ キーを押すと、履歴から前のコマンドを呼び出せます。
候補は、完全一致、前方一致、部分一致、シェルが返したその他の候補の順に並びます。完全一致と前方一致では、大文字と小文字まで一致する候補が先に並びます。各グループの中では短い候補が先に並び、長さが同じ場合はアルファベット順になります。
一覧では、各候補のうち入力と一致する部分が強調表示され、シェルが説明を提供している場合はその説明も表示されます。長い説明は、候補にポインターを合わせると読めます。結果が更新されても、一覧の位置と選択は変わりません。候補を確定すると、/ で終わるディレクトリの場合も含めて、一覧は閉じます。次の階層を表示するには、もう一度 Tab キーを押します。自動表示モードでは、続けて入力すると一覧が再び開きます。
挿入の処理中に入力を変更した場合、VelaTerm はシェルから新しい結果が返るのを待ち、その候補がまだ含まれている場合にだけ挿入します。
対応するシェル
| シェル | 候補 |
|---|---|
| Zsh | ネイティブの補完ウィジェットと compadd を使います。既存の補完定義がそのまま使われます。 |
| Bash 4 以降 | 登録済みの補完関数と補完の指定を使います。何も登録されていない場合は、コマンド名とファイル名を候補にします。 |
| Fish | ネイティブの complete -C による候補と説明を使います。 |
| PSReadLine を使う PowerShell(pwsh) | ネイティブの CommandCompletion.CompleteInput を使います。 |
| Bash 3.2 とその他のシェル | シェル本来の Tab キーの動作のみで、候補の一覧は表示されません。 |
macOS に付属する Bash はバージョン 3.2 です。macOS の Bash でコマンド候補を使うには、より新しい Bash(Homebrew でインストールしたものなど)をログインシェルに設定してください。
コマンド候補は、通常のターミナルセッションでのみ使えます。エージェントセッションの動作は変わりません。
シェル連携の読み込み方法
VelaTerm は、ターミナルの起動時にシェル連携を読み込みます。シェルの起動ファイルが変更されることはなく、独自の起動コマンドも、シェル連携の読み込み後にこれまでどおり実行されます。この機能を含むバージョンをインストールする前から動作していたターミナルは、再起動する必要があります。
- Zsh では、ユーザー自身のログインファイルの後に、一時的な起動ファイルを通じてシェル連携を読み込み、その後で
ZDOTDIRを元に戻します。ターミナルには何も入力されません。 - Bash は、一時的な
--rcfileを指定して起動します。このファイルは、まず Bash の通常の順序でログインファイルを読み込み(/etc/profile、次に~/.bash_profile、~/.bash_login、~/.profileのうち最初に見つかったもの)、その後でシェル連携を読み込みます。ターミナルには何も入力されません。通常のログインシェルとの違いが2つ残ります。shopt -q login_shellが false を返すことと、シェルの終了時に~/.bash_logoutが実行されないことです。 - Fish と PowerShell には同等の起動フックがないため、VelaTerm はシェルの起動時に、シェル連携を読み込むコマンドを1つ送信します。この行は、新しいターミナルの先頭に表示されます。
シェル連携のスクリプトにも、PowerShell の実行ポリシーが適用されます。VelaTerm が実行ポリシーを回避することはありません。
コマンドの実行中、全画面表示のプログラムが開いている間、入力メソッド(IME)での変換中、履歴の操作中(Ctrl+R、Ctrl+S、矢印キー)は、候補の表示が一時停止します。矢印キーで自動の問い合わせが始まることはないため、↑ キーを繰り返し押すと、以前のコマンドを順にたどれます。シェル連携が有効でない場合や候補が見つからなかった場合、Tab キーはシェル本来の動作のままです。
ターミナルの中で SSH や別のシェルを起動しても、その環境にはシェル連携は組み込まれません。
Windows
Windows では、設定の内容にかかわらずシェル連携は読み込まれず、「コマンドの補完候補」の設定も表示されません。cmd、Windows PowerShell、pwsh、Git Bash、WSL のターミナルでは、Tab キーはシェル本来の動作のままです。Windows でこの機能を読み込むには、新しいターミナルごとにコマンドを入力する必要があり、問い合わせのたびに補助プロセスが起動して入力が遅くなるため、この機能はオフのままにしています。
制限事項
- 候補は、お使いのシェルにインストールされている補完定義によって決まります。VelaTerm は、独自のコマンド一覧や履歴に基づく予測は提供しません。
- 複雑な Bash の補完スクリプトの中には Readline の内部動作に依存するものがあり、シェル連携ではその動作を完全には再現できません。
- 補完関数は外部プログラムを実行することがあり、時間がかかる場合があります。一覧は2秒で待機を打ち切りますが、実行中のシェル関数は強制終了されません。中断するには、通常どおり Ctrl+C を押してください。
- シェル連携は、候補の収集に Ctrl+F12 を、選んだ候補の挿入に Ctrl+F11 を使います。ターミナルの起動後にシェルの設定でこれらのキーを割り当て直すと、コマンド候補が使えなくなることがあります。Bash 4.0〜4.3 では、シェル連携は Enter キーと Ctrl+J の割り当てにも独自の処理を追加します。
- 説明はシェルから提供されます。Bash の補完定義の多くは説明を提供しないため、その候補には説明が表示されません。
動作確認
この機能は、macOS では Zsh と Bash 5.2、Linux では Bash、Zsh、Fish、PowerShell 7.4 で動作を確認しています。