Если вы используете zsh и выполняете tabавтодополнение для команд, путей, опций и т. д., то всякий раз, когда есть несколько потенциальных совпадений, предложения будут отображаться под подсказкой.
После того, как вы выбрали предложение, zsh удалит список предложений из терминала, как вы можете видеть здесь:
Напротив, когда bash предлагает варианты завершения, он выводит список и возвращает вас к новой подсказке.
Источник изображения
Поведение zsh для меня предпочтительнее, так как предложения, которые я никогда не использовал, не приносят никакой пользы и просто производят больше "шума" в терминале.
Возможно ли настроить bash/readline так, чтобы они вели себя как zsh?
решение1
короче: это возможно, но сложно из-за .inputrc
привязок.
длинный: Как и было предложено в комментарии, вымогсделайте что-то подобное в командной строке bash и привязках readline.
Сохранение/восстановление курсора будет неэффективным, поскольку единственная точка, в которой вы сможете надежно очистить оставшуюся часть экрана, — это нажатие Enterдля завершения выбора.
После того, как вы передали управление accept-line
, слишком поздно очищать оставшуюся часть экрана. Возможно (но сложно) определить ряд реальных и специальных "привязок клавиш", чтобы readline мог выполнять более одной операции. См. например
Но этот подход ограничивает вас отправкой символов в bash и выдачей команд в readline. Ни одна из команд readline не делает
printf '\033[J'
чтобы очиститьостатокэкрана. Ближайшим будет встроенный в readline clear-screen
(нетчто вы хотите). Ваша привязка должна будет сделать что-то вроде
beginning-of-line
- вставлять "
printf '\033[J';
" end-of-line
accept-line
Это end-of-line
будет работать в обход причуды readline. Это позволяет вам нажатьEnter в любом местена строке. Если бы ваш курсор находился в середине строки, то у вас остался бы видимым только фрагмент ввода (хотя bash получил бы всю строку).