Завершение команды аргументов из папки

Можно ли создать список завершений для команды на основе файлов некоторых папок?

Скажем, я хочу запустить Sublime Text 2 в одном из моих проектов, которые сохранены как ~/sublime_projects/*.sublime-project. Желаемое поведение:

 subl<tab><tab>
   foo bar project2

при наличии foo.sublime-project, bar.sublime-project, project2.sublime-project файлов в ~/sublime_projects.

4
задан 24 August 2013 в 13:06

1 ответ

Вы можете использовать следующую функцию 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 перечисляет все проекты в каталоге проектов

  • при вводе subl ANY_LETTER TAB автоматически завершает имя проекта, если ANY_LETTER_TAB соответствует с первым персонажем проекта.

Например, если у вас внутри ~/projects следующее: test.sublime-project и foo.sublime-project и введите subl t TAB в терминале, вы получите subl test.sublime-project

ОБНОВЛЕНИЕ ] приведенный ниже сценарий не меняет 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

Второй скрипт ищет типизированный символ после subl и заменяет его полным путем к соответствующему имени файла. Например, если есть test.sublime-project в ~/projects, набрав subl t, будет заменено на subl /home/USERNAME/projects/test.sublime-project

0
ответ дан 24 August 2013 в 13:06

Другие вопросы по тегам:

Похожие вопросы: