Поиск предыдущей команды с тем же префиксом при нажатии клавиши «Вверх» в командной строке оболочки

Поиск предыдущей команды с тем же префиксом при нажатии клавиши «Вверх» в командной строке оболочки

Придя из мира FreeBSD, я хотел бы, чтобы терминал Linux вел себя как FreeBSD, особенно версии 9.1. По сути, когда вы вводите текст cdв терминале и нажимаете стрелку «вверх», вы можете просмотреть все команды в истории, начиная с cdэтой, что позволяет сэкономить много времени.

Я не знаю, как включить эту функцию в Linux Debian или CentOS, из-за чего мне приходится вводить весь текст целиком. Может кто-нибудь помочь?

решение1

Добавить к следующему ~/.inputrc:

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

Объяснение

~/.inputrcэто файл конфигурации дляGNU-readline. Многие оболочки, включая bashи tcshиспользуют readline для редактирования командной строки. Две строки выше сообщат readline о необходимости вызова функции поиска в истории при обнаружении escape-последовательностей для клавиши со стрелкой вверх ( \e[A) и клавиши со стрелкой вниз ( ).\e[B

решение2

Дело в том, что FreeBSD и Linux по умолчанию используют разные оболочки. FreeBSD по умолчанию используеттчш, который в прошлом имел лучшие интерактивные возможности, чем bash (но bash догнал), нозаметно хуже возможности скриптинга.

Самый простой способ получить привычную среду — переключить оболочку на tcsh в Linux. При условии, что tcsh установлен в системе (если нет, попросите системного администратора установить его), запустите, chsh -s tcshчтобы изменить оболочку по умолчанию.

В качестве альтернативы вы можете настроить bash так, чтобы эта команда была вам привычна. По умолчанию Upстрелки Downи перемещают по всем командам в истории, а не только по тем, которые начинаются с введенного вами префикса. Чтобы изменить это поведение на привычное, поместите следующие строки в файл инициализации bash, который находится .bashrcв вашем домашнем каталоге. Запустите . ~/.bashrcили запустите новую оболочку, чтобы перечитать файл инициализации.

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'

Последовательности escape — это то, что ваш терминал отправляет в оболочку при нажатии клавиши со стрелкой. UpЭто может быть \eOA(escape, O, A) или \e[Aв зависимости от вашего терминала, и аналогично для Down.

По умолчанию bash предлагает различные сочетания клавиш для поиска в истории команд. Вы можете нажать Ctrl+ R, а затем ввести несколько символов для поиска команды, содержащей эту подстроку в любом месте строки. Нажмите Ctrl+ S, чтобы перейти вперед, а не назад. Поиск является инкрементным (т. е. по мере ввода); Alt+ Pи Alt+ Nдают вам неинкрементный поиск.

Вместо bash и tcsh вы можете переключиться на zsh, которыйимеет некоторые полезные функции, которых нет в других оболочках. Zsh имеет Ctrl+ Rи Ctrl+ Sпо умолчанию, как и bash. Чтобы получить Upи Downкак в tcsh, поместите следующие строки в ~/.zshrc:

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

Если вы хотите использовать одну и ту же оболочку везде, вы можете использовать bash или zsh на FreeBSD, при условии, что установлен порт (опять же, обратитесь к своему системному администратору).

решение3

tcshдоступен для большинства дистрибутивов Linux. Попробуйте установить пакет tcsh, а затем запустить его chsh -s /bin/tcsh, чтобы сделать его оболочкой по умолчанию.

Связанный контент