是否可以根据某些文件夹的文件创建命令的完成列表?
假设我想在我的一个项目上运行 Sublime Text 2,该项目另存为~/sublime_projects/*.sublime-project
。期望的行为:
subl<tab><tab>
foo bar project2
以防万一中有foo.sublime-project, bar.sublime-project, project2.sublime-project
文件~/sublime_projects
。
答案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
by typing中有一个subl t
,则将被替换为subl /home/USERNAME/projects/test.sublime-project