Używam uzupełniania tabulacji bardziej niż pisania liter. Kiedyś pisałem rm ~/De<TAB>
i było to gotowe, aby rm ~/Desktop/
móc kontynuować na wyższym poziomie.
Ostatnio to zachowanie się zmieniło. Ukończenie daje teraz wynik rm ~/Desktop<SPACE>
, co oznacza, że muszę cofnąć i wpisać ukośnik, jeśli chcę kontynuować. To sprawia, że płaczę.
Wydaje się, że zmiany są zlokalizowane w funkcji _longopt()
w /etc/bash_completion
, ale o ile mogę to zrobić. Czy ta zmiana jest zamierzona, a jeśli tak, to po co jest dobra? Czy mogę odzyskać stare zachowanie, najlepiej za pomocą opcji config zamiast kopiowania starego kodu z innego systemu?
Edycja: funkcja w celach informacyjnych.
_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()
funkcji?
readline
ustawień (masz ~/inputrc
plik?) Oraz od faktu, że element jest prawdziwym katalogiem lub dowiązaniem symbolicznym do katalogu.
.inputrc
tego systemu. (To były dni, ustalanie klawiszy Backspace i kursorów…) I dzieje się tak w przypadku wszystkich elementów, katalogu lub pliku, dowiązania symbolicznego lub nie.
rmdir
nie”mkdir
lub „ for”touch
.