How to reset COMP_WORDBREAKS without affecting other completion script?

后端 未结 1 980
没有蜡笔的小新
没有蜡笔的小新 2020-12-01 10:52

There is something confuse me when I implement a bash auto-completion function which I\'ll put it in /etc/bash_completion.d/

In order to achieve som

相关标签:
1条回答
  • 2020-12-01 11:13

    Modifying $COMP_WORDBREAKS in your completion script is not the recommended way (as it is a global variable and it could affect the behavior of other completion scripts - for example ssh).

    However, bash completion offers some helper methods which you can use to achieve your goal.

    The recommended way to handle non-word-breaking characters in completion words is by using the two helper methods:

    • _get_comp_words_by_ref with the -n EXCLUDE option
      • gets the word-to-complete without considering the characters in EXCLUDE as word breaks
    • __ltrim_colon_completions
      • removes colon containing prefix from COMPREPLY items
        (a workaround for http://tiswww.case.edu/php/chet/bash/FAQ - E13)

    So, here is a basic example of how to a handle a colon (:) in completion words:

    _mytool()
    {
        local cur
        _get_comp_words_by_ref -n : cur
    
        # my implementation here
    
        COMPREPLY=( $(compgen ..........my_implement......... -- $cur) )
    
        __ltrim_colon_completions "$cur"
    }
    complete -F _mytool mytool
    

    As a final tip, the helper methods are located in /etc/bash_completion. Take a look inside to read a detailed description of each method and to discover more helper methods.

    0 讨论(0)
提交回复
热议问题