$ CDPATHのようなものはすべてのbashコマンドに適用されます。

$ CDPATHのようなものはすべてのbashコマンドに適用されます。

$CDPATH各コマンドラインツールに対して機能する方法があるかどうかを確認しようとしています。現在、私のホームディレクトリには、src/私のすべてのプロジェクトを含むディレクトリがあります。これにより、毎回入力するcd <foo>必要なく、すべてのディレクトリの内容を入力できます。cd ~/src/foo

私は似たようなことをすることvim foo/bar.cができ、bashが私が意味するものを自動的に把握できるようにしたいと思います。また、オートコンプリートで編集したいコンテンツの提案を提供し、残りの部分もオートコンプリートするようにvim foo/<Tab>したいと思います。vim fo<Tab>foo

同様の作業を行う既存のオートコンプリートスクリプトはありますか?自分で作ってみようとしましたが、欲しい効果が出ませんでしたね。可能であれば、サブディレクトリ(たとえば)も自動補完したいと思いますfoo/baz/thing.c

ありがとうございます!

答え1

私が述べたように、どのコマンドに対しても透明にこれを行う簡単な方法はないと思います。

ラッパースクリプトを生成して名前を付けることで、f次のことができます。

f() {
    local command=$1; shift
    local files=() arg file
    for arg in "$@"; do
        file=$(some method to look up the current file in $CDPATH)
        files+=("$file")
    done
    "$command" "${files[@]}"
}

f vim foo.c bar.h

もちろん、これはオプションやファイル名ではない引数(つまり、実行を許可しないgrep -i pattern foo.c)を知らず、引数がCDPATHディレクトリにない場合はどうすればよいかを考慮する必要があります。

関連情報