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

12

В руководстве по 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-"?

user784637
источник

Ответы:

15

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

stty -a | grep '\^S'

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

stty stop ^J

или удалить его вместе с

stty stop undef

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

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

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

enzotib
источник
^ J - хороший выбор, потому что stopон не используется ни для чего другого
hobs
3

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

$ stty stop undef

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

ntnt
источник
Это намного лучший способ.
А.Данищевский
1

forward-search-history (Cs) не работает (хотя она есть на странице man).

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

Гедель
источник
1
Не верная C-sчасть, смотри мой ответ.
энзотиб
0

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

stty stop ^J

но

stty stop ^P

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

stty sane 
export TERM=linux

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

ssh root@192...

так

stty stop ^P

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

xerostomus
источник
0

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

stty -ixon

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

пример

Стивен Пенни
источник
0

Для переключения вперед при использовании обратного поиска (с помощью команды Ctrl-R):

  1. Откройте файл .bashrc:
    sudo gedit ~/.bashrc

  2. добавить эту строку (буква "f" может быть заменена другой, еще не используемой системой)

    bind '"\C-f": forward-search-history' 
    
  3. Закройте ваш файл и обновите ваш .bashrc (или откройте другой терминал) с помощью команды:
    source ~/.bashrcили. ~/.bashrc

ТЕПЕРЬ ВЫ МОЖЕТЕ ДВИЖИТЬСЯ В ИСТОРИЮ С ИСТОЧНИКОМ: Ctrl + f

Работа над Ubuntu 18.04 LTS

Франклин Т.Н.
источник
0

Обратите внимание, что я использовал

stty stop ^J
stty -ixoff

в .bashrc для включения прямого поиска и отключения надоедливого «Вывод был приостановлен нажатием Ctrl + S. Нажмите Ctrl + Q для возобновления» в Konsole, когда были нажаты ctrl + s, но обе команды по отдельности нарушили интеграцию Konsole в Dolphin ( ярлык «F4») таким образом, что мне пришлось выполнить ctrl + c два раза, чтобы заставить его работать даже, и автоматические команды «cd», которые не вводились при графической навигации.

Поэтому я сейчас предпочитаю:

stty stop undef
stty -ixon

Это имеет тот же эффект, все, кажется, работает как ожидалось;)

Нога
источник