文字を入力するよりもタブ補完を使用します。以前は入力rm ~/De<TAB>
していたrm ~/Desktop/
ので、次のレベルに進むことができるように完了していました。
最近、その動作が変更されました。完了後rm ~/Desktop<SPACE>
、が得られます。つまり、続行するには、バックスペースを押してスラッシュを入力する必要があります。これは私を泣かせます。
変更はの関数_longopt()
にあるように見えますが/etc/bash_completion
、それは私の知る限りです。この変更は意図的なものであり、もしそうであれば、何の役に立つのでしょうか?古いコードを他のシステムからコピーするのではなく、設定オプションを使用して、古い動作に戻すことはできますか?
編集:参照用の関数。
_longopt()
{
local cur prev split=false
_get_comp_words_by_ref -n = cur prev
_split_longopt && split=true
case "$prev" in
--*[Dd][Ii][Rr]*)
_filedir -d
return 0
;;
--*[Ff][Ii][Ll][Ee]*|--*[Pp][Aa][Tt][Hh]*)
_filedir
return 0
;;
esac
$split && return 0
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W "$( $1 --help 2>&1 | \
sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*/\1/p' | sort -u )" \
-- "$cur" ) )
elif [[ "$1" == @(mk|rm)dir ]]; then
_filedir -d
else
_filedir
fi
}
_longopt()
関数の本体を投稿していただけますか?
readline
設定(~/inputrc
ファイルをお持ちですか?)およびアイテムが実際のディレクトリまたはディレクトリへのシンボリックリンクであるという事実に依存します。
.inputrc
もうこのシステムにはありません。(これらは、バックスペースとカーソルキーを修正する日でした…)そして、それはすべての要素、ディレクトリまたはファイル、シンボリックリンクに関係なく起こります。
rmdir
はなく、mkdir
などのコマンドでのみ役立ちますtouch
。