Как сделать автозаполнение терминала на основе ранее введенных команд?

При использовании терминалов нормально, что нажатие вверх и вниз циклически повторяет предыдущие команды, введенные в хронологическом порядке.

На сайте я узнал, как добавить к этому поведение, автоматически заполняя то, что я печатаю на курсоре, на основе ранее введенных команд при нажатии вверх и вниз.

Например, допустим, я набрал следующие команды в следующем порядке:

  1. ls Videos
  2. ls Vids
  3. lsomething
  4. ls Videos/Funny/Old
  5. vi file
  6. ls Music

Если я ничего не набрал, нажатие вверх и вниз будет циклически проходить по всем строкам, как обычно. Но если я набрал ls, нажатие вверх и вниз циклически перебирает все команды, где первые 2 символа ls (строки 1,2,3,4,6 выше). входящий ls (с пробелом после), тем не менее, будет только циклы вверх и вниз по строкам 1,2,4,6. Так же, ls Vid позволяет стрелкам циклически проходить через строки 1,2,4, но ls Videos просто позволяет ездить на велосипеде между строками 1 и 4.

Довольно полезно заполнять значения, характерные для команд, которые вам нужно вводить снова и снова, без необходимости циклически перебирать каждую несвязанную команду, которую вы вводили между ними. Например, я пытаюсь проверить влияние env значения, такие как локаль, на вещи:

env [many different values] [command]
[insert many different commands here]
env [slightly different values from before] [command]
[doing other stuff]

Мне нужно только нажать несколько раз после ввода env циклически переключаться между значениями, которые я пробовал.

Я прошу прощения, если это немного долгий путь, чтобы описать это. Я не знаю, как это называется. Мои терминалы имели такое поведение, но они, кажется, потеряли его, и я не могу найти сайт, с которого я узнал. Я думаю, что это связано с редактированием ~/.bashrc,

1 ответ

Решение

Чтобы получить поведение, которое вы после, добавьте эти строки в свой ~/.inputrc (создайте файл, если он не существует):

"\e[A": history-search-backward
"\e[B": history-search-forward

Затем откройте новый терминал, и он будет работать как положено. Это поведение контролируется настройками в /etc/inputrc а также ~/.inputrc, Вы можете прочитать больше о них в Readline Command Names раздел man bash:

   non-incremental-forward-search-history (M-n)
          Search forward  through  the  history  using  a  non-incremental
          search for a string supplied by the user.
   history-search-forward
          Search  forward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.
Другие вопросы по тегам