文件夹中的命令 Tab 补全参数

文件夹中的命令 Tab 补全参数

是否可以根据某些文件夹的文件创建命令的完成列表?

假设我想在我的一个项目上运行 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~/projectsby typing中有一个subl t,则将被替换为subl /home/USERNAME/projects/test.sublime-project

相关内容