Как сделать историю bash чувствительной к префиксам?

8

Как я могу заставить нажатие вверх / вниз на bash вызвать последнюю команду, которая началась с префикса, который я уже ввел?

Например

$ ls foo
$ echo hello
$ ls <UP_ARROW>

Нажатие UP после ввода ls должно вызвать "ls foo", а не "echo hello"

ripper234
источник

Ответы:

11

Несколько возможностей:

  1. Свяжите history-search-backward/forwardкоманды. Я считаю, что это ближе всего к тому, что вы хотите:

    bind '"\e[A":history-search-backward'
    bind '"\e[B":history-search-forward'
  2. Используйте историю i-search. Это, вероятно, связано с ^R. В пустой строке ^Rls<space>вы вернетесь к нему ls foo, затем ^Rснова перенесете вас к последней lsкоманде (или другой команде, lsнаходящейся где-то в строке) перед этим ls fooи т. Д ...

  3. Привязать magic-spaceкоманду: bind SPACE:magic-space. Затем введите (в пустой строке) !ls<space>, и readline выполнит подстановку истории автоматически, оставив вас с ls foo.

Энди
источник
1
Спасибо. Я выбрал вариант 1 и с помощью этого старого ответа понял, что \ e [B свяжет стрелку вниз.
ripper234
Я отредактировал ваш вопрос, включив в него историю-поиск-пересылку (ну, отправил редактирование в очередь редактирования)
ripper234