lox*_*axs 5 bash bash-completion
我尝试为别名添加一个完成:alias m='man'.
所以,我添加complete -F _man m到我的.bashrc.
问题是_man用于完成的函数不是在 bash 会话开始时定义的,而是在对$ man命令执行第一个 tab-competition 时定义的。
所以:
$ complete -p | grep _man可以不返回任何内容,也可以返回:
complete -F _man man
complete -F _man apropos
complete -F _man whatis
Run Code Online (Sandbox Code Playgroud)
因此,当我尝试按$ m命令完成选项卡时,我可以得到:
$ m -bash: completing : function « _man » not found
$ m
Run Code Online (Sandbox Code Playgroud)
而且我有功能相同的问题_aptitude和_apt-get
我想要的是,一旦 bash 启动,就使用 my.bashrc强制创建函数_man, 。_aptitude_apt-get
也许可以使用compgen内置。
我的 bash 版本是:
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
谢谢阅读。
编辑:事实上,一个类似的问题已经存在并已得到回答:
- bash-completion - 第一次调用命令时定义的完成函数-
你的.bashrc:
alias m='man'
complete -F _man m
Run Code Online (Sandbox Code Playgroud)
只需添加:
_completion_loader man
Run Code Online (Sandbox Code Playgroud)
然后,$ m即使之前没有执行制表符补全,您的补全也会正常工作$ man。
_completion_loader 可能没有在您的发行版中定义。以下是在 Ubuntu 14.04 的 .bashrc 中找到的代码副本:
_completion_loader ()
{
local compfile=./completions;
[[ $BASH_SOURCE == */* ]] && compfile="${BASH_SOURCE%/*}/completions";
compfile+="/${1##*/}";
[[ -f "$compfile" ]] && . "$compfile" &> /dev/null && return 124;
complete -F _minimal "$1" && return 124
}
Run Code Online (Sandbox Code Playgroud)
实际上,为了避免生成_man两次函数,您还应该将该行更改
complete -F _man m为
complete -F _man man m.
| 归档时间: |
|
| 查看次数: |
1220 次 |
| 最近记录: |