Я использую табуляцию больше, чем набираю буквы. Я использовал для ввода, rm ~/De<TAB>
и это будет завершено, чтобы rm ~/Desktop/
я мог перейти на следующий уровень.
В последнее время это поведение изменилось. Завершение теперь дает rm ~/Desktop<SPACE>
, что означает, что я должен вернуться назад и набрать косую черту, если я хочу продолжить. Это заставляет меня плакать.
Изменения, похоже, находятся в функции _longopt()
in /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
}
rmdir
, а не дляmkdir
илиtouch
._longopt()
функции?readline
настроек (у вас есть~/inputrc
файл?) И от того факта, что элемент является реальным каталогом или символической ссылкой на каталог..inputrc
в этой системе больше. (Это были дни, исправление backspace и клавиш курсора ...) И это происходит для всех элементов, каталога или файла, символической ссылки или нет.Ответы:
Это известная ошибка. Смотрите этот вопрос LP и эти ошибки 1 2 .
Этот комментарий кажется исправлением. Если вы не можете дождаться исправления, чтобы проскочить по обычным каналам, отредактируйте
/etc/bash_completion
строку 1587, изменитеdefault
наfilenames
(сначала сделайте резервную копию).источник
/etc/bash_completion
строку 1587, изменивdefault
наfilenames
.У меня была и решена та же проблема после установки Adobe Reader на Ubuntu 12.04.
Я закомментировал
_filedir
блок,/etc/bash_completion.d/acroread.sh
и он снова работал нормально.источник
_filedir
блок (справа вверху) исправил это. Вы должны выйти или запустить exec bash во всех своих оболочках, чтобы увидеть эффект, см. Этот вопрос .У меня была такая же проблема, и я исправил ее, удалив каталог /etc/bash_completion.d/, а затем переустановил bash_completion. Я думаю, что старый файл был в этом каталоге ... Надеюсь, это решит и вашу проблему.
источник
bash-completion
один из оставшихся файлов/etc/bash_completion.d/
должен быть виновником. Это былоacroread.sh
в моем случае - это переопределяет_filedir
.