Как перевести историю поиска с помощью команды reverse-i-search (ctrl + r)?

10

В руководстве по чтению

# 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, и терминал не переходит вперед. Я что-то делаю неправильно?

И какой ключ имеет префикс Met-M??

    
задан user784637 05.09.2011 в 05:38
источник

5 ответов

14

Последовательность C-s взята из драйвера терминала, как вы можете видеть из

stty -a | grep '\^S'

Чтобы освободить последовательность для использования с помощью readline, установите последовательность останова в какую-либо другую последовательность, например,

stty stop ^J

или вообще удалите его с помощью

stty stop undef

После этого C-s будет работать в данном терминале.

Установите его в ~/.bashrc , чтобы он работал в каждом терминале.

Последовательность M- означает ключ Alt , как уже отмечалось.

    
ответ дан enzotib 05.09.2011 в 12:42
источник
1

forward-search-history (C-s) не работает (хотя он находится на странице руководства).

'M-' представляет модификатор ключа Alt.

    
ответ дан Gödel 05.09.2011 в 05:56
1

В дополнение к назначению другого TTY «stop» char, как было предложено выше, вы можете полностью удалить его, если вы не планируете его использовать (я не хочу этого делать), например:

$ stty stop undef

Затем readline может использовать элементы управления для прямого поиска, и вы не получите какого-либо странного поведения из-за добавления нового добавочного символа.

    
ответ дан ntnt 26.09.2014 в 06:26
0

Пожалуйста, не используйте:

stty stop ^J

, но

stty stop ^P

или что-либо еще, так как ^J создает большие проблемы с ssh. (Я не знаю, почему так или иначе). После того, как я вошел в систему Enter , и обратная косая черта не работала. или мне пришлось набирать:

stty sane 
export TERM=linux

, прежде чем я захотел напечатать

ssh [email protected]

так

stty stop ^P

одновременно решал обе проблемы.

    
ответ дан xerostomus 13.04.2014 в 12:44
0

Вы можете отключить управление потоком XON / XOFF:

stty -ixon

в вашем ~ / .profile или аналогичном, тогда будет распознан Ctrl + S.

Пример

    
ответ дан Steven Penny 15.01.2017 в 16:48