lev*_*que 96 bash alias autocomplete
我希望在我的命令行别名上获得制表符补全,例如,假设我定义了以下别名:
alias apt-inst='sudo aptitude install'
Run Code Online (Sandbox Code Playgroud)
当我按下 Tab 键时,有没有办法获得 aptitude 提供的补全?即,当我编写“sudo aptitude install gnumer”并点击选项卡时,aptitude 会将其完成为 gnumeric,或者如果存在不确定性,则会列出所有以 gnumer 开头的可用软件包。如果我使用我的别名,什么都没有 - 没有完成。
Cyk*_*ker 62
试试complete-alias,它正好解决了这个问题。(免责声明:我是作者complete_alias)
安装后,您可以使用一个通用函数来完成许多别名,如下所示:
complete -F _complete_alias <myalias1>
complete -F _complete_alias <myalias2>
complete -F _complete_alias <myalias3>
Run Code Online (Sandbox Code Playgroud)
您可能希望complete_alias通过.bash_profile或类似方式在每个 bash 实例中获取文件。
mkdir ~/.bash_completion.d
curl https://raw.githubusercontent.com/cykerway/complete-alias/master/complete_alias \
> ~/.bash_completion.d/complete_alias
Run Code Online (Sandbox Code Playgroud)
source ~/.bash_completion.d/complete_alias
alias container=docker\ container
complete -F _complete_alias container
Run Code Online (Sandbox Code Playgroud)
container现在可以由原始_docker()完成处理程序自动完成;
$ container l<Tab>
logs ls
$ container s<Tab>
start stats stop
Run Code Online (Sandbox Code Playgroud)
Sha*_*off 43
在 Ubuntu 论坛上有一个很好的主题。Ole J 提出如下别名补全定义函数:
function make-completion-wrapper () {
local function_name="$2"
local arg_count=$(($#-3))
local comp_function_name="$1"
shift 2
local function="
function $function_name {
((COMP_CWORD+=$arg_count))
COMP_WORDS=( "$@" \${COMP_WORDS[@]:1} )
"$comp_function_name"
return 0
}"
eval "$function"
echo $function_name
echo "$function"
}
Run Code Online (Sandbox Code Playgroud)
使用它来定义别名的完成函数,然后将该函数指定为别名的完成函数:
make-completion-wrapper _apt_get _apt_get_install apt-get install
complete -F _apt_get_install apt-inst
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用别名向现有程序添加始终使用的参数。例如,对于grep,我总是想跳过设备和二进制文件,所以我为grep. 为了添加诸如 之类的新命令grepbin,我在我的~/bin文件夹中使用了一个 shell 脚本。如果该文件夹在您的路径中,它将自动完成。
小智 8
通过谷歌搜索这个问题,我最终到了这里,所以我尝试了其他答案中的方法。由于各种原因,我实际上并不理解,它们在我的 Ubuntu 16.04 中从未表现得很好。
最终对我有用的东西比预期的要琐碎得多。我想使用与rsyncfor相同的自动完成功能mycommand。因此,我查找了自动完成功能,然后相应地调用了它complete。
# Lookup of name of autocompletion function used for rsync
complete -p rsync
# Returns: complete -o nospace -F _rsync rsync
# Sourcing the rsync functions before, then using the same function for 'mycommand'
. /usr/share/bash-completion/completions/rsync
complete -o nospace -F _rsync mycommand
Run Code Online (Sandbox Code Playgroud)
免责声明:与其他方法相比,我不确定我的方法的缺点是什么。我主要写这个是因为它可以帮助人们使用这种微不足道的方法可能就足够了。