web-dev-qa-db-fra.com

Onglet Commande complétion des arguments du dossier

Est-il possible de créer une liste de finitions pour une commande basée sur les fichiers de certains dossiers?

Dites que je veux exécuter Sublime Text 2 sur l'un de mes projets, qui sont enregistrés sous le nom ~/sublime_projects/*.sublime-project. Comportement souhaité:

 subl<tab><tab>
   foo bar project2

au cas où il y aurait foo.sublime-project, bar.sublime-project, project2.sublime-project fichiers dans ~/sublime_projects.

4
mreq

Vous pouvez utiliser la fonction bash suivante, ajoutez-la en vous .bashrc

Notez le chemin de répertoire pour la variable 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

Ce qu'il fait:

  • lorsque vous tapez subl TAB TAB TAB, il répertorie tous les projets dans le répertoire des projets.

  • lorsque vous tapez subl ANY_LETTER TAB, il termine automatiquement le nom du projet si ANY_LETTER_TAB correspond au premier caractère du projet.

Par exemple, si vous avez dans ~/projects ce qui suit: test.sublime-project et foo.sublime-project et tapez subl t TAB dans le terminal, vous obtiendrez subl test.sublime-project

UPDATE le script ci-dessous ne modifie pas la PWD je laisse les deux pour référence future.

# 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

Le second script recherche un caractère saisi après subl et le remplace par le chemin d'accès complet du nom de fichier correspondant. Par exemple, s'il y a un test.sublime-project dans ~/projects en tapant subl t sera remplacé par subl /home/USERNAME/projects/test.sublime-project

4
Stef K