タブを完成させるためのターゲットディレクトリをどのように変更しますか?

タブを完成させるためのターゲットディレクトリをどのように変更しますか?

メモを有効にする短いスクリプトが見つかりました。すべてうまくいった。、含まれて:

function n { nano ~/n/$1.txt }

既存のコメント「foobar」(~/n/foobar.txt)を編集したい場合は、入力する必要なく入力してオートコンプリートするように、foo[TAB]これをタブ完成に拡張したいと思います。foobar「foobar」は毎回「です。問題は、bashの組み込みタブの完成が現在のディレクトリの中心にあるようです。これ$ n foo[TAB]はsnafu /に「footastic」というファイルがある可能性があるため$ n foobarです$ n footastic

したがって、すべての序文が終わった後の質問は次のようになります。可能であれば、「n」と入力した後にbashにどのように通知できますか?ちょうど一度だけ現在のディレクトリにあるファイルを使用するのではなく、〜/ nにあるファイルを使用して作業を実行するとします。

この電子独白をすべて理解したらおめでとうございます。回答本当にありがとうございました!

答え1

これであなたはそこまで行くことができると思います...

  1. .bashrcでカスタムタブ補完を有効にする

    shopt -s progcomp

  2. compgen関数を作成して.bashrcに追加します。後ろにメモ作成機能。

    _notes() {
    local cur
        cur=${COMP_WORDS[COMP_CWORD]}
        COMPREPLY=( $(compgen -f $HOME/n/$cur | cut -d"/" -f5 ) )
        }
       complete -o filenames -F _notes n

これは基本レベルで私に効果的です。まだ入れ子になったディレクトリの問題を解決できませんでした。

引用:

  1. ほとんどはここから来ました:http://sixohThree.com/867/bash-completion

  2. ここに埋め込まれた詳細を完了してください。http://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html

答え2

jasonwryanの答えに対するフォローアップのために、cutを使用して既知のルートターゲットの先頭を切り取りました。

_c ()
{
    local cur
    COMPREPLY=()
    cur=${COMP_WORDS[COMP_CWORD]}
    case "$cur" in
        *)
            COMPREPLY=( $(compgen -f /src/$cur | cut -c 6-) )
            ;;
    esac

    return 0
} &&
complete -o filenames -F _c c

これにより、以下のディレクトリ、サブディレクトリ、またはファイル名を直接操作できます。/src/

関連情報