arm*_*ino 13 bash shell ubuntu maven-2 autocomplete
我在文档之后为Maven添加了bash完成:
http://maven.apache.org/guides/mini/guide-bash-m2-completion.html
除了使用冒号的目标外,一切运作良好.例如,而不是
mvn eclipse:eclipse
Run Code Online (Sandbox Code Playgroud)
完成逃脱冒号
mvn eclipse\:eclipse
Run Code Online (Sandbox Code Playgroud)
有什么建议可以修复吗?我正在使用Ubuntu 8.10(2.6.27-17-generic)和
$ bash -version
GNU bash,版本3.2.39(1)-release(i486-pc-linux-gnu)
Pau*_*ce. 13
来自Bash FAQ E13.
complete在您链接到的脚本中的命令之后,发出此命令以从完成分隔字符列表中删除冒号:
COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
Run Code Online (Sandbox Code Playgroud)
这是一个相关问题和另一个建议的解决方案:
如何在不影响其他完成脚本的情况下重置COMP_WORDBREAKS?
如前所述,最简单的解决方案是改变COMP_WORDBREAKS.但是,COMP_WORDBREAKS在完成脚本中进行修改并不安全(因为它是一个全局变量,它具有影响其他完成脚本行为的副作用 - 例如scp).
因此,bash完成提供了一些帮助方法,您可以使用这些方法以更好,更安全的方式实现目标.
在Bash完成1.2中添加了两个辅助方法:
_get_comp_words_by_ref有-n EXCLUDE选项__ltrim_colon_completions
所以,这是一个如何在完成单词中处理冒号(:)的基本示例:
_mytool()
{
local cur
_get_comp_words_by_ref -n : cur
# my implementation here
__ltrim_colon_completions "$cur"
}
complete -F _mytool mytool
Run Code Online (Sandbox Code Playgroud)
使用辅助方法还可以简化完成脚本,并确保在任何环境(bash-3或bash-4)上获得相同的行为.
您还可以查看man或perl完成脚本,/etc/bash_completion.d以了解它们如何使用上述帮助程序方法来解决此问题.