В руководстве Readline
# man readline
Ниже описывается, как выполнять поиск назад и вперед.
reverse-search-history (C-r)
Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental search.
forward-search-history (C-s)
Search forward starting at the current line and moving `down' through the history as necessary. This is an incremental search.
Когда я нажимаю ctrl+r и печатаю "apt-get", я могу сделать обратный поиск по истории, постоянно нажимая ctrl+r. Но затем я нажимаю ctrl+s, и терминал не переходит вперед. Я что-то делаю неправильно?
А какой ключ представляет собой мета-префикс «M-»?
решение1
Последовательность C-s
взята из драйвера терминала, как вы можете видеть из
stty -a | grep '\^S'
Чтобы освободить последовательность для использования readline, установите последовательность терминала остановки на какую-либо другую последовательность, например:
stty stop ^J
или удалить его полностью с
stty stop undef
После этого C-s
будет работать в данном терминале.
Установите его ~/.bashrc
, чтобы он работал на каждом терминале.
Последовательность M-
означает Altключ, как уже отмечалось.
решение2
Помимо назначения другого символа «стоп» TTY, как предлагалось выше, вы можете полностью удалить его, если не планируете его использовать (я стараюсь этого не делать), например так:
$ stty stop undef
Тогда readline сможет использовать control-s для прямого поиска, и вы не столкнетесь с каким-либо странным поведением из-за добавления нового стоп-символа.
решение3
История прямого поиска (Cs) не работает (хотя она есть на странице руководства).
«M-» представляет собой модификатор клавиши Alt.
решение4
Пожалуйста, не используйте:
stty stop ^J
но
stty stop ^P
или что-нибудь еще, что ^J
создает большие проблемы с ssh. (Я не знаю почему в любом случае.) После того, как я вошел в систему, Enterобратная косая черта не работала. или мне приходилось вводить:
stty sane
export TERM=linux
прежде чем я хотел напечатать
ssh root@192...
так
stty stop ^P
решил обе проблемы одновременно.