Можно ли создать список завершений для команды на основе файлов некоторых папок?
Скажем, я хочу запустить Sublime Text 2 в одном из моих проектов, которые сохранены как ~/sublime_projects/*.sublime-project
. Желаемое поведение:
subl<tab><tab>
foo bar project2
при наличии foo.sublime-project, bar.sublime-project, project2.sublime-project
файлов в ~/sublime_projects
.
Вы можете использовать следующую функцию 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