【问题标题】:How to activate FULL $var completion如何激活 FULL $var 完成
【发布时间】:2012-06-30 20:20:33
【问题描述】:

在 Debians BASH 下,我可以执行以下操作:

foo=/path/to/some/file

cat $f[TAB]

如您所见,我可以通过按 TAB 自动完成变量 $foo。

在 Ubuntu (11) 下,行为不一样(我在 bashrc 中激活了“/etc/bash_completion”)。

这是有效的:

echo $f[TAB]

这个不工作:

cat $f[TAB]

谁能给我一个提示,如何让最后一个工作?

【问题讨论】:

    标签: bash variables ubuntu debian bash-completion


    【解决方案1】:

    您可以通过以下方式删除/etc/bash_completioncat 提供的完成规范:

    complete -r cat
    

    或者您可以查看修改/etc/bash_completion 中提供的完成选项是否适用于您正在使用的 Bash 版本:

    complete -F _longopt -o filenames -o bashdefault cat
    

    如果您使用的是最新的 Bash 4.2 补丁版本,有一个选项可能会有所帮助(我还没有尝试过):

    shopt -s direxpand
    

    【讨论】:

    • 好吧..这解决了我的“cat”问题..但是使用“grep”等会出现同样的问题。我是否必须在我使用的每个程序上都这样做,还是有一种全局方式?
    • @casper:您可以尝试将_longopt() 替换为无操作:_longopt() { :; },但这可能会破坏其他内容。你可以运行一个循环:for p in cat grep; do complete -r "$p"; done。您可以修改_longopt(),以便当$cur 以“$”开头时,它将COMPREPLY 设置为由变量名组成的compgen。可能还有其他方法。我的回答中的第二个建议对您有用吗?
    • 我禁用了. /etc/bash_completion。在~/.bashrc。现在它的工作。我认为这是最优雅的方式,而不是砖砌其他东西。我必须禁用完成才能完成的事实在我看来有点连线;-)
    • @casper:您已经禁用了一些 programmed 补全来获得 default 补全。请注意(为了完整起见)您没有禁用 可编程 完成 - shopt -u progcomp 这样做 - 虽然我不知道为什么有人会想要。
    猜你喜欢
    • 2019-06-10
    • 1970-01-01
    • 2014-05-22
    • 2021-12-11
    • 1970-01-01
    • 2011-10-06
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多