web-dev-qa-db-ja.com

フォルダーからの引数のコマンドタブ補完

一部のフォルダーのファイルに基づいてコマンドの補完リストを作成することは可能ですか?

私のプロジェクトの1つで~/sublime_projects/*.sublime-projectとして保存されているSublime Text 2を実行したいとします。望ましい行動:

 subl<tab><tab>
   foo bar project2

foo.sublime-project, bar.sublime-project, project2.sublime-project~/sublime_projectsファイルがある場合。

4
mreq

次のbash関数を使用して、.bashrcに追加できます

PROJECTS_DIR変数のディレクトリパスに注意してください

# bash completion for sublime projects in ~/projects
_subl()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    PROJECTS_DIR="/home/mreq/projects/"
    LOOK_FOR="*.sublime-project"
    cd ${PROJECTS_DIR}
    PROJECTS=$(ls ${LOOK_FOR})
    COMPREPLY=( $(compgen -W "${PROJECTS}" -- $cur) )
}
complete -F _subl subl

それが何をする:

  • subl TAB TAB TABと入力すると、projectsディレクトリにあるすべてのプロジェクトがリストされます。

  • subl ANY_LETTER TABと入力すると、ANY_LETTER_TABがプロジェクトの最初の文字と一致する場合、プロジェクト名が自動的に補完されます。

たとえば、~/projectsの内部にtest.sublime-projectfoo.sublime-projectがあり、ターミナルでsubl t TABと入力すると、subl test.sublime-projectが表示されます。

[〜#〜] update [〜#〜]以下のスクリプトはPWDを変更しません。今後の参考のために両方を残しています。

# bash completion for sublime projects in ~/projects
_subl()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    PROJECTS_DIR="/home/mreq/projects/"
    LOOK_FOR=".sublime-project"
    # cd ${PROJECTS_DIR}
    PROJECTS=$(ls ${PROJECTS_DIR} | grep "^${cur}.*${LOOK_FOR}")
    COMPREPLY=${PROJECTS_DIR}${PROJECTS}
}
complete -F _subl subl

2番目のスクリプトは、sublの後に入力された文字を探し、一致するファイル名の完全パスに置き換えます。たとえば、test.sublime-project~/projectsと入力すると、subl tと入力するとsubl /home/USERNAME/projects/test.sublime-projectに置き換えられます

4
Stef K