Utilizo completar pestañas más que escribir letras. Solía escribir rm ~/De<TAB>
y se completaría para rm ~/Desktop/
poder continuar en el siguiente nivel.
Recientemente, ese comportamiento cambió. La finalización ahora produce rm ~/Desktop<SPACE>
, lo que significa que debo retroceder y escribir la barra diagonal si quiero continuar. Esto me hace llorar.
Los cambios parecen estar situada en la función _longopt()
de /etc/bash_completion
, sin embargo, que es por lo que yo puedo seguir. ¿Es este cambio intencional y, de ser así, para qué sirve? ¿Puedo recuperar el comportamiento anterior, preferiblemente mediante una opción de configuración en lugar de simplemente copiar el código anterior desde algún otro sistema?
Editar: La función de referencia.
_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()
función?
readline
configuración (¿tiene un ~/inputrc
archivo?) Y del hecho de que el elemento es un directorio real o un enlace simbólico a un directorio.
.inputrc
en este sistema. (Esos eran los días, arreglando las teclas de retroceso y cursor ...) Y sucede para todos los elementos, directorio o archivo, enlace simbólico o no.
rmdir
, no paramkdir
otouch
.