自动完成目录中的文件名

Don*_*van 17 bash autocomplete filenames

这个问题是非常相似这一个,但我不明白的解决方案。我也知道这个教程,但我仍然无法理解我做错了什么。

我正在尝试自动完成放置在以下位置的目录列表/something/:

$ ls /something/

One    Other    Three
Run Code Online (Sandbox Code Playgroud)

在某种程度上,这将发生:

$ hi [TAB]

One Other Three
$ hi O[TAB]

One Other
Run Code Online (Sandbox Code Playgroud)

只有当第一个词是,hi而不是只有里面/something/。

这就是我在做什么.profile:

_codeComplete()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen `ls /something/` -- $cur) )

}
complete -F _codeComplete "hi "
Run Code Online (Sandbox Code Playgroud)

dog*_*ane 16

尝试:

_codeComplete()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "$(ls /something/)" -- $cur) )
}

complete -F _codeComplete hi
Run Code Online (Sandbox Code Playgroud)

您需要指定-W选项 incompgen并引用生成单词列表的命令。

有关如何在此博客上编写完成函数的更多信息:编写您自己的 Bash 完成函数

  • 这将在包含空格和其他特殊字符的文件名上失败。 (6认同)
  • 如果你不知道`complete` 命令的名称并且正在搜索`autocomplete` 或`tab-completion`,那么找到它是非常困难的......这是我找到命令名称的第一个地方,并且我需要在升级到 Ubuntu 14.04 时为 `eject` 修复它(`$ complete -p ls` -> `complete -F _longopt ls`,所以修复是:`complete -F _longopt eject`)(希望这个评论有助于其他人找到它!) (2认同)