【问题标题】:How to autocomplete files under specific directory?如何自动完成特定目录下的文件?
【发布时间】:2020-07-19 11:56:33
【问题描述】:

我创建了一个命令memo如下:

memo() {
  vi $HOME/memo/$1
}

我想对我的memo 应用 bash-completion 来打开已经在$HOME/memo 目录中的文件:

$ memo [TAB] # to show files in $HOME/memo

$HOME/memo 包含目录,因此在memo 下列出文件是不够的。 换句话说,我想将$HOME/memols命令中使用的内容应用到memo

$ ls [TAB]
foo.md bar/

我尝试了以下方法,但它不适用于嵌套目录:

_memo() {
    local cur
    local files
    _get_comp_words_by_ref -n : cur
    files=$(ls $MEMODIR)
    COMPREPLY=( $(compgen -W "${files}" -- "${cur}") )
}
complete -F _memo memo

MEMODIR=$HOME/memo

【问题讨论】:

    标签: bash bash-completion


    【解决方案1】:

    这是一个简单的例子:

    _memo()
    {
        local MEMO_DIR=$HOME/memo
        local cmd=$1 cur=$2 pre=$3
        local arr i file
    
        arr=( $( cd "$MEMO_DIR" && compgen -f -- "$cur" ) )
        COMPREPLY=()
        for ((i = 0; i < ${#arr[@]}; ++i)); do
            file=${arr[i]}
            if [[ -d $MEMO_DIR/$file ]]; then
                file=$file/
            fi
            COMPREPLY[i]=$file
        done
    }
    complete -F _memo -o nospace memo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      相关资源
      最近更新 更多