
私が次のようなディレクトリにあるとしましょう。
:私のディレクトリ $ls
foo.txt
それが唯一の文書です。これを入力してcat
Tabキーを押すと、オートコンプリートされます(文字が実際にはキャレット位置であり、この目的に使用される文字ではないと仮定します)...
:私のディレクトリ$猫‸
(もう一度言うが、‸は文字ではなくカラットです)に変更します...
:mydirectory$ 猫 foo.txt ‸
ただし、次のコマンドの場合は異なります。
:私のディレクトリ$tar‸
タブをクリックすると、オートコンプリートオプションが表示されます。
A c d r t u x
次のように書くとき:
:私のディレクトリ$ tar -zxvf ‸
これにより、何も自動的には実行されません。
私の質問例:Bashでオートコンプリートルールを変更する方法については、多くのコマンドがありますか?
答え1
このコマンドはオートコンプリートルールを変更しません。オートコンプリートのルールは、スクリプトと関数を使用してシェルに対して定義され、シェルの起動時にロードされます。bash
他のシェルよりも慣れているので、これを例として使用します。
inのオートコンプリートルールはbash
inスクリプトで定義されており/etc/bash_completion
、ディレクトリ内の他のスクリプトで補完されます/etc/bash_completion.d/
。これらのルールはbash
ログイン時に取得されます。
bash
complete
完成ルールを簡単に定義できるコマンドがあります。定義されているすべてのルールを表示するには、を実行できますcomplete -p
。
現在、ほとんどのディストリビューションではすでにこれらのルールが定義されています。したがって、と入力すると、tar <TAB>
ディストリビューションでパターンおよび*.tar*
コマンドtar
オプションに一致するファイルをオートコンプリート提案として表示するルールを定義しました。そのため、 を入力するとtar
オプションが提供されますが、そのA c d r t u x
場合tar -zvxf
は他にオプションがないため、オプションは提供されません。このディレクトリにファイルを出力すると、そのオプションの後のファイルがtarファイルである.tar.gz
ため、オートコンプリートオプションとして提案されます。f
デフォルトでは、/etc/bash_completion
提案とファイル形式はフィルタリングされないため、オプションは提供されません。この場合、foo.txt
ファイルは提案としても表示されますtar
。
ここで独自のルールを作成する方法をお読みください。https://debian-administration.org/article/316/An_introduction_to_bash_completion_part_1そしてhttps://debian-administration.org/article/317/An_introduction_to_bash_completion_part_2