さまざまなパラメータを必要とするユーティリティがあります。最初のパラメータをオートコンプリートし、他のすべてのパラメータは引き続き正常にオートコンプリートするようにしたいと思います。どうすればいいですか?
function _my_autocomplete_()
{
case $COMP_CWORD in
1) COMPREPLY=($(compgen -W "$(get_args_somehow)" -- ${COMP_WORDS[COMP_CWORD]}));;
*) # What goes here?
esac
}
complete -F _my_autocomplete_ mycommand
答え1
明らかに私はあなたの質問を完全に逃しました。答えは、明確に定義された「一般的なオートコンプリート」がないことです。ただし、実行したい操作の種類(ファイル、エイリアス、pid、変数名など)がわかっている場合compgen
。Compgen のマニュアルページ、特に以下の-A
オプションcomplete
(同じ)です。たとえば、ファイル名を完成させるには、次のコマンドを使用できます。
compgen -f -- "${COMP_WORDS[COMP_CWORD]}"
コマンドの完成(エイリアス、関数などを含む)が必要な場合は、次のものを使用できます。
compgen -back -A function -- "${COMP_WORDS[COMP_CWORD]}"
使用$COMP_CWORD
完成する単語のインデックスを取得します。 indexが1以外の場合に設定され、$COMPREPLY
返され()
ます。
COMP_CWORD
An index into ${COMP_WORDS} of the word containing the current
cursor position. This variable is available only in shell functions
invoked by the programmable completion facilities
答え2
他の答えは正しくありません。compgen -f
デフォルトの動作に近いですが、まったく同じではありません(違いを確認するには、ディレクトリ名の自動補完を試してください)。
答えは# What goes here?
簡単です。compopt -o default