BashでCDのワイルドカードオートコンプリート

BashでCDのワイルドカードオートコンプリート

Ubuntuでbashを使用する(debian jessie / sid)ワイルドカードのタブを完成できない理由がわかりません。組み込みコマンドの使用

たとえば、現在の作業ディレクトリに次のサブディレクトリが含まれているとします。

% ls -l
drwxr-xr-x 2 userX 4096 2016-08-31 11:46:40 0830a/
drwxr-xr-x 2 userX 4096 2016-08-31 11:46:52 0830b/
drwxr-xr-x 2 userX 4096 2016-08-31 11:47:33 0831a/
drwxr-xr-x 2 userX 4096 2016-08-31 11:47:18 0831b/
drwxr-xr-x 2 userX 4096 2016-08-31 11:50:38 z0830z/

「ls -l *31a」と入力して[tab]を押すと完了です。

ls -l *31a<tab>

完了しました...

ls -l 0831a

ただし、組み込みの「cd」コマンドを使用して同じ操作を実行しようとすると、完了しません。

cd *31a<tab>

..完了しません

また、末尾のワイルドカードを使用すると失敗します。

cd z*<tab>

..完了しません

興味深いことに、組み込み関数ではワイルドカードなしで完成がうまく機能します。たとえば、次のような完成タスクが正しく実行されるようにすることができます。

cd z<tab>

完了しました...

cd z0830z/

また、「cd *31a」コマンドをそのまま使用して成功させることもできます(固有の場合に限る)。しかし、私は拡張が起こり、私が何をしているのか確信できることを望みます。

私の.inputrcには次のものが含まれています。

$if Bash
  Space: magic-space
  set mark-directories on
  set mark-symlinked-directories on
  set completion-ignore-case off
  set show-all-if-ambiguous on
$endif

~/.bash_completion ファイルがありません。 /usr/share/bash-completion/bash_completionのみを提供する/etc/bash_completionがあります。後者のファイルは少し長いので、ここに含めません。

私の究極の目標は、cdコマンドにワイルドカード補完機能を提供することです。

ベストアンサー1

私も同じ問題で苦労しています。 @Gillesが述べたように、まだ実際のbashベースのソリューションはありません。

bash-completion実際に多くの機能を追加しないためcd(私が知っている限りディレクトリのみを使用する$CDPATH)、使用しない場合は次のように追加できます~/.bashrc

compopt -o bashdefault cd

これにより、完了動作がcdデフォルト値(ワイルドカード補完が適用されます)にリセットされ、他の内容は変更されません。

おすすめ記事