define
辞書から単語定義をインポートするカスタムコマンドがあります。の単語リストを使用して、定義したい単語を完成させる自動補完スクリプトを作成したいと思います/usr/share/dict/words
。これが私が今まで持っているものです:
オートコンプリートスクリプト:/etc/bash_completion.d/define
_define()
{
dict='/usr/share/dict/words'
cur=${COMP_WORDS[COMP_CWORD]}
regex="^$cur*"
words=$(grep $regex $dict)
if [[ $cur != -* ]]
then
COMPREPLY=( $( compgen -W "$(echo $words)" $cur) )
else
COMPREPLY=()
fi
return 0
}
complete -F _define define
クリックすると、[tab][tab]
入力した単語で始まる単語のリストが表示されることがあり、最後の文字だけが削除されることがあります。たとえば、これを行うとdefine wall [tab][tab]
表示されますがdefine wal
、これによりdefine wal [tab][tab]
単語のリストが表示されます。
なぜこれが起こるのですか?
答え1
問題は、完成語リストの一重引用符文字に関連することが判明し、コマンドの正規表現を次から次に変更することで問題を解決し'
ました。grep
^$cur*
^$cur[^']*$
_define()
{
local dict='/usr/share/dict/words'
local cur=${COMP_WORDS[COMP_CWORD]}
local regex="^$cur[^']*$"
if [[ $cur == -* ]]
then
COMPREPLY=()
else
local WORDS="$( grep "$regex" $dict )"
COMPREPLY=( $(compgen -W "${WORDS}" -- $cur) )
fi
}
complete -F _define define