创建制表符完成脚本。在一种情况下,我想将完成用于另一个命令(例如 git),这可能吗?
Creating a tab completion script. In one case I want to use the completion for another command (e.g. git), is it possible?
所以我正在编写一些命令:
全部-build.sh
全部-git.sh
这些 运行 命令在多个文件夹和 spawn 输出 windows(运行ning tail -f 在日志上)和各种其他东西。
但是我每个人都接受不同的命令,我想要制表符补全
所以我阅读了有关制表符补全的教程,并且我有全 completion.bash 脚本,如下所示:
#!/usr/bin/env bash
complete -W "param1 param2 param3" all-build.sh
complete -W "status log push pull" all-git.sh
如您所见,所有构建的自动完成参数是我自己的自定义参数,对此我很满意。但是 git 是某些实际 git 参数的重复。所以我真正想要的是:
complete <use git completion> all-git.sh
因此,当我执行 all-git submodule upd<tab>
时,它会使用 git 的自动完成功能自动完成 all-git submodule update
。
这可能吗?
我们可能会使用 _completion_loader
,(用于动态定义完成 )以加载 git
个完成。
那我们可以在官方观察git-completion.sh file, that function used to complete git "submodules" is called _git
, so we can simply pass it to complete
via -F <function>
option, see complete documentation.
所以写
source /usr/share/bash-completion/bash_completion
_completion_loader git
complete -F _git all-git.sh
我们可以实现预期的行为(如果我正确地解决了您的问题)。
注意:bash_completion
脚本可能位于您计算机上的不同文件夹中。我已经在 Ubuntu 16.04 和 bash 4.3.48.
上进行了测试
编辑:如果这不能完全解决您的问题,我相信这就是您想要的方式:)。您几乎可以根据需要改变解决方案。
EDIT-2:我还假设,您已经安装并运行 git 完成。
EDIT-3:我发现了一些有趣的链接,它们并没有解决您的特定问题,但可以提供一些浅显和更深入的知识:
- Accessing tab-completion programmatically in Bash
- Perform tab-completion for aliases in Bash
- Accessing bash completions for specific commands programmatically
很简单:
source /usr/share/bash-completion/completions/git
__git_complete all-git.sh __git_main
__git_complete()
函数是创建 Git 补全的助手,它被 Git 本身使用,如下所示:__git_complete git __git_main
。您可以将它用于特定命令,例如 __git_complete all-submodule.sh _git_submodule
.
它是专门为此设计的,因此无需将其复杂化。
所以我正在编写一些命令:
全部-build.sh 全部-git.sh
这些 运行 命令在多个文件夹和 spawn 输出 windows(运行ning tail -f 在日志上)和各种其他东西。
但是我每个人都接受不同的命令,我想要制表符补全
所以我阅读了有关制表符补全的教程,并且我有全 completion.bash 脚本,如下所示:
#!/usr/bin/env bash
complete -W "param1 param2 param3" all-build.sh
complete -W "status log push pull" all-git.sh
如您所见,所有构建的自动完成参数是我自己的自定义参数,对此我很满意。但是 git 是某些实际 git 参数的重复。所以我真正想要的是:
complete <use git completion> all-git.sh
因此,当我执行 all-git submodule upd<tab>
时,它会使用 git 的自动完成功能自动完成 all-git submodule update
。
这可能吗?
我们可能会使用 _completion_loader
,(用于动态定义完成 )以加载 git
个完成。
那我们可以在官方观察git-completion.sh file, that function used to complete git "submodules" is called _git
, so we can simply pass it to complete
via -F <function>
option, see complete documentation.
所以写
source /usr/share/bash-completion/bash_completion
_completion_loader git
complete -F _git all-git.sh
我们可以实现预期的行为(如果我正确地解决了您的问题)。
注意:bash_completion
脚本可能位于您计算机上的不同文件夹中。我已经在 Ubuntu 16.04 和 bash 4.3.48.
编辑:如果这不能完全解决您的问题,我相信这就是您想要的方式:)。您几乎可以根据需要改变解决方案。
EDIT-2:我还假设,您已经安装并运行 git 完成。
EDIT-3:我发现了一些有趣的链接,它们并没有解决您的特定问题,但可以提供一些浅显和更深入的知识:
- Accessing tab-completion programmatically in Bash
- Perform tab-completion for aliases in Bash
- Accessing bash completions for specific commands programmatically
很简单:
source /usr/share/bash-completion/completions/git
__git_complete all-git.sh __git_main
__git_complete()
函数是创建 Git 补全的助手,它被 Git 本身使用,如下所示:__git_complete git __git_main
。您可以将它用于特定命令,例如 __git_complete all-submodule.sh _git_submodule
.
它是专门为此设计的,因此无需将其复杂化。