コマンドに対してタブ補完が機能しない


50

Ubuntu 11.04 Beta 1のコマンドにタブ補完を使用して、すべての最新アップデートを実行しようとしていますが、機能していないようです。(パッケージbash-completionはインストールされていますが)

タブ補完は、ディレクトリまたはファイルに対してのみ正しく機能します。

どこを掘るのか?


回答:


67

.bashrcに次のフラグメントがあるかどうかを確認します(デフォルトで存在するはずです)

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

ありがとう!私は.bashrcを自分のものに置き換えたので、問題が何であるかを理解できませんでした。今では完全に動作します。
スクリーチ

これにより、xubuntu 12.04でのgit bashのオートコンプリートも修正されました。
パルミック

コマンドラインのapt-getのスイッチとオプションのオートコンプリートはどうですか?つまり、apt-get insと入力してから、タブを押して自動補完します。
レザゴッディ

3
bash-completionこれが機能するためにはパッケージが必要であることを付け加えたいと思います。奇妙なことに、私の会社の標準インストールにはこのパッケージがありません。
エドガー

13

私はまた、bash補完の失敗について次の追加の説明を追加すると思いました-コメントには長すぎて、bash補完に問題がある人には役立つかもしれません、おそらくこれは「一般的な」標準的な質問すべての重複が参照されます。

あなたは、あなたの中で適切なラインを持っていたとしても.bashrc(上記の回答のように)とbash-completionあなたはどちらか持っている場合はパッケージがインストールされ、bashの補完することができ、まだ故障shopt -s nullglobshopt -s failglob、あなたの中.bashrc.bash_aliases

次のシナリオは、すべてのユーザのカスタマイゼーションを用いて試験した.bashrc.bash_aliasesの適切なbashの完了ラインと、公正なテストを与えるために除去.bashrc存在しと共にbash-completionインストールされています。

1)最初のシナリオはshopt -s failglob.bashrcまたはにいる場合です.bash_aliases

それぞれ完全なディレクトリとファイルをタブで表示しようとすると、次のエラーが発生します。

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

ただし、コマンドは引き続き正常に完了します。

2)shopt -s nullglob有効にすると、ディレクトリまたはファイルをタブ補完しようとすると、代わりにすべてがリストされ、補完されません:

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............

非常に長く、すべてを再現する必要がないため、ここでリストを短くしました。

繰り返しますが、コマンド補完は引き続き機能します。

そのため、適切な行がインストールされていると仮定して、bashの完了に関するエラーの問題を削除するshopt -s failglobか、shopt -s nullglob解決することもできます。.bashrcbash-completion


1
わかりやすい説明です。タブ補完を試みてエラーが発生したときに問題を解決しました>> words [0] = $ {!ref} $ {COMP_WORDS [i]}
bagustris

これは回避策として機能しますが、完了プログラマーが依存することはまずいことです。nullglob(名目上は多くの方が良い)とkinが設定される可能性があるため、古いセマンティクス(一致しないワイルドカードはワイルドカード自体になります)を必要とする完全なコードは、現在のglob設定を保存し、必要な設定を設定し、復元する必要がありますIFSが通常使用されるのと同じように、その後は古いglob設定。
アレックスノースキーズ

10

/etc/bash.bashrcファイルの変更(その他の回答)に加えて、bash-completionパッケージのインストールが必要になる場合があります。

/etc/bash_completionファイルが存在するかどうかを確認します。いいえの場合:

sudo apt-get install bash-completion

(Debian 7の私のインストールでは、最初にインストールされませんでした)


7

基本的に聞こえるかもしれませんが、bashがアクティブなシェルであることを確認してください

echo $SHELL

Ubuntu 14.04.1 LTSにアップグレードしたばかりで、この投稿のアドバイスに従った後でも、タブの自動補完は/bin/shありませんでした/bin/bash


2

Ubuntu 14.04.01への更新

.bashrcに次のフラグメントがあるかどうかを確認します(デフォルトで存在するはずです)

sudo vim /etc/bash.bashrc(「i」と入力してファイルを編集します)

    # enable bash completion in interactive shells
    if ! shopt -oq posix; then
     if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi

7行上のコメントを外します

保存ファイル「esc + w + q + enter」

bashを再起動します

exec bash


1
これは何をしますか?これはデフォルトではこのようではありませんか?
ティム14

@Timが言うように、その構成はデフォルトの構成によって提供されます。
ソソ14年

これは私のために働いた
-Thamaraiselvam

この答えは魅力のように機能し、反対票がありますか???
グルーズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.