如何使用tab生成我的文件夹中可能的条目列表?

时间:2018-03-20 01:54:20

标签: bash zsh oh-my-zsh

我在我的Mac和ZSH上使用iTerm和我的zsh主题为dstufft

我是在.bash_rc

中写的
 function goToPythonApp {
        # no params given
        if [ -z "$1" ]; then
            cd ~/Documents/Apps/PythonApps
        else
            cd ~/Documents/Apps/PythonApps/$1
        fi
   }

所以我可以输入goToPythonApp abc

然后我会切换到~/Documents/Apps/PythonApps/abc

但有时,我会忘记~/Documents/Apps/PythonApps/

中文件夹的名称

有没有办法输入goToPythonApp,然后按<space>,然后按<tab>生成~/Documents/Apps/PythonApps/中的条目列表?

类似于ZSH(或oh-my-zsh)如何为半类命令执行自动完成?

或者我可以输入goToPythonApp ab然后按<tab>,自动完成会建议abc这是~/Documents/Apps/PythonApps/文件夹中的有效条目吗?

更新

使用下面答案中建议的技术,然后我得到了command not found for complete

然后,在我提供autoload bashcompinit && bashcompinit

之前,我添加了.bash_rc file

command not found for complete已消失,但标签仍不起作用

2 个答案:

答案 0 :(得分:3)

在Zsh中,您不需要自己的功能。将以下内容添加到setopt autocd pyapps=~/Documents/Apps/PythonApps 文件中:

autocd

cd允许您只需键入目录名称即可更改为目录,而不是显式使用man zshexpn命令。

静态命名目录(在FILENAME GENERATION下的pyapps中描述)允许您为目录定义〜-prefixed别名。只要~pyapps不是系统上用户的名称,变量的内容就会在您使用它的任何地方替换~pyapps

结合这两个功能,

  • cd "$pyapps"相当于~pyapps/Project1
  • cd "$pyapps/Project1"相当于~pyapps/<TAB>
  • $pyapps将允许您对{{1}}。
  • 的内容使用制表符完成功能

答案 1 :(得分:2)

你可以使用bash完成功能来处理这个

将此脚本添加到您的rc文件或bash_profile文件中,然后重新打开终端

function goToPythonApp {
        # no params given
        if [ -z "$1" ]; then
            cd ~/Documents/Apps/PythonApps/
        else
            cd ~/Documents/Apps/PythonApps/$1
        fi
}

function _GPA {
    local cur
    cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $( compgen -S/ -d ~/Documents/Apps/PythonApps/$cur | cut -b 18- ) )
}


complete -o nospace -F _GPA goToPythonApp

Complete Info on how to do this