Як орієнтуватися у зворотному пошуку Bash?


40

Bash пропонує функцію зворотного пошуку через Ctrl+ R. Тоді можна ввести частину команди, вона покаже відповідний запис з історії.

Припустимо, це моя історія:

vim foo1
vim foo2 # I want to go here
vim foo3 # this is where I land, how to go back?

Я шукаю foo. Натискання Ctrl+ Rзнову показує наступний відповідний пошук. Часто трапляється зі мною, що я занадто швидкий і переходжу через запланований результат, і vim foo3це показано, і зараз я хочу повернутися до vim foo2.

Звідси моє запитання: як мені орієнтуватися в межах зворотного пошуку?


Який термінал ви використовуєте? Напр. gnome-terminal, konsole, так далі ...
varesa

1
Ну я не надто знайомий з ним ... Ключ повинен бути ctrl + S, але деякі термінали, здається, їдять ключ, перш ніж він досягне зворотного пошуку
varesa

Ctrl + shift + R - пошук вперед, тоді як ctrl + R
devansvd


Відповіді:


36

Ви можете отримати доступ до цього через forward-search-historyфункцію, яка прив'язується за замовчуванням до ctrl+s. На жаль ctrl+s, використовується для сигналу xoffза замовчуванням, що означає, що ви не можете використовувати його для зміни напрямку пошуку. Існує два рішення для вирішення проблеми: одне вимкнення надсилання xoff/xonсигналізації, а інше змінити прив'язку клавішforward-search-history

Вимкнути xon / xoff

Запустіть stty -ixonу своєму терміналі або додайте його до свого ~/.bashrc. Це дозволяє використовувати ctrl+sдля використання функції forward-search-historyісторії.

Для отримання додаткової інформації про контрольний потік див. Як розморозити після випадкового натискання Ctrl-S у терміналі? і деякі відповіді

Змініть прив'язку клавіш

Якщо ви не хочете , щоб змінити поведінку за замовчуванням , ctrl+sви можете змінити поєднання клавіш для forward-search-historyз bind. Оскільки більшість ключів уже визначено в bash, можливо, вам доведеться проявити творчість:

bind "\C-t":forward-search-history

Це пов'язуватиметься ctrl+tз історією пошуку вперед, але врахуйте, що це ctrl+tпрацює за замовчуваннямtranspose-chars


Я спробував ваше перше рішення stty -ixonв zshі вона працює дуже добре. Однак чи є можливі небажані побічні ефекти при відключенні xoff/xonсигналізації?
студент

@student Ви більше не можете використовувати ctrl+sдля призупинення висновку терміналу. Якщо ви ніколи до цього не користувались, це не проблема
Ульріх Дангел

1
На те, чого це варто, я пішов з другим рішенням. Чудові речі! Я ніколи не знав, що ви можете заморозити консоль натисканням C-s.. дуже корисно при використанні хвоста в журналах сервера. Акуратно! (Я б хотів, щоб у мене було ще одне обговорення :))
Ашутош Джіндал

Не вдалося отримати варіант №2 для роботи над OSX. Мені довелося це зробити замість цього:bind '"\C-t": history-search-forward'
stiemannkj1

0

В якості альтернативи базовому зворотному пошуку та пошуку вперед, наданим вашим bash, ви можете розглянути:

fzf , самоописаний "нечіткий пошук" командного рядка.

Він може замінити зворотний пошук вашого bash (та інших терміналів) за замовчуванням.

Його переваги полягають у тому, що він:

  • друкує список ваших команд з історії
    • перемикає хронологічне чи релевантне сортування, натискаючи Ctrl + R ще раз
  • можна переходити за допомогою клавіш зі стрілками (або Ctrl + J / Ctrl + K)
  • дозволяє шукати кілька голок

Зараз мій робочий процес повністю покладається на fzf над основним зворотним пошуком на машинах, над якими я контролюю.

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