Як передати історію пошуку за допомогою команди reverse-i-search (ctrl + r)?


12

У посібнику з перегляду записів

# 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 і термінал не йде вперед. Я роблю щось неправильне?

Також який ключ представляє префікс Meta "M-"?

Відповіді:


15

Послідовність C-sвзята з драйвера терміналу, як ви бачите з

stty -a | grep '\^S'

Щоб звільнити послідовність для використання за допомогою лінії зчитування, встановіть послідовність зупинки терміналу на якусь іншу послідовність, наприклад, наприклад

stty stop ^J

або видаліть його повністю

stty stop undef

Після цього C-sпрацював би в даному терміналі.

Встановіть його, ~/.bashrcщоб він працював у кожному терміналі.

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


^ J - хороший вибір, оскільки для stopцього він не використовується ні для чого іншого
варильні панелі

3

На додаток до призначення іншого TTY символу "стоп", як було запропоновано вище, ви можете його повністю видалити, якщо ви не плануєте його використовувати (як правило, не так):

$ stty stop undef

Тоді readline може використовувати управління для пошуку вперед, і ви не отримаєте жодної дивної поведінки через додавання нового стоп-символу.


Це набагато кращий спосіб.
A.Danischewski

1

історія пошуку вперед (Cs) не працює (хоча вона знаходиться на сторінці man).

'M-' являє собою модифікатор клавіш Alt.


1
Не виправте C-sчастину, дивіться мою відповідь.
enzotib

0

Будь ласка, не використовуйте:

stty stop ^J

але

stty stop ^P

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

stty sane 
export TERM=linux

перш ніж я хотів набрати

ssh root@192...

тому

stty stop ^P

вирішили обидві проблеми одночасно.



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

Це має той самий ефект, все, здається, працює так, як очікувалося;)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.