Вопрос Задание команд для аргументов из папки


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

Скажем, я хочу запустить 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
2017-08-24 09:06


происхождения




ответы:


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


4
2017-08-24 11:32



Удивительно, именно то, что я искал. Благодарю. - mreq
Одно: это изменяет ваш $PWD в $PROJECTS_DIR, Есть ли способ сохранить текущий? Я попытался сохранить его и восстановить после COMPREPLY но это не сработало. - mreq
Спасибо за редактирование! К сожалению, второй скрипт не работает с пустым <tab> завершение проектов. Используя первый - странно, что набрав cd - после $PWD изменение было сделано, не возвращает вас туда, где вы были. - mreq
Он не вернет вас, потому что скрипт вернется. Что касается второго скрипта, вы можете перейти к подстановочным символам * и TAB для отображения проектов, но не в хорошем смысле. Лично я предпочитаю первый скрипт. - Stef K