Настройте стрелку вверх для просмотра команд с одинаковыми начальными символами вместо всех предыдущих команд

15

В bashкомандной строке выдает мне предыдущую команду. В командной строке numpyили matlab, когда я набираю несколько символов, выдает ранее введенную команду, начинающуюся с этих символов . Как я могу включить именно это поведение в bash?

Мне известны более продвинутые способы поиска по истории командной строки, но иногда простой способ удобнее.

Геррит
источник

Ответы:

18

Команды readline, которые вы ищете, это history-search-*команды:

history-search-forward
Поиск вперед по истории для строки символов между началом текущей строки и текущей позицией курсора (точка). Это неинкрементный поиск.
history-search-backward
Поиск назад по истории строки символов между началом текущей строки и точкой. Это неинкрементный поиск.

Привязать их в вашем .inputrc, вот так:

"\e[A": history-search-backward            # arrow up
"\e[B": history-search-forward             # arrow down

позволит ввести первые символы команды, а затем использовать Upи Downклавиши для перемещения через только те команды , в вашем , .bash_historyкоторые начинаются с этой строки.

Например, введя viи Up, вы перейдете к первой предыдущей команде, начинающейся с vi, например vim somefile. Ввод Upприведет вас к следующему предыдущему экземпляру и так далее.

Вы можете прочитать больше обо всех привязках readline здесь: http://linux.about.com/library/cmd/blcmdl3_readline.htm

jasonwryan
источник
10

Добавьте следующее в ваш .inputrc в ~ /, чтобы сделать то, что вы предложили:

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

Возможно, вы также захотите добавить следующее в ваш .bash_profile:

export INPUTRC=~/.inputrc
johankj
источник
Не могли бы вы уточнить, зачем делать этот «экспорт»?
19
2

Добавить "!" к команде, которую вы ищете. Если вы хотите заменить функциональность стрелок вверх и вниз, то изменение файла inputrc (как предлагают другие ответы) - это путь.

Если «команда» - это команда, которую вы ищете, введите это:

!comm

Вы должны получить «команду» в качестве вывода.

Аналогично, если вы хотите найти команду, которая включает (но может не начинаться с) часть команды, нажмите ctrl + r, а затем введите часть команды.

Вы также можете ввести «вкладку», чтобы автоматически заполнить введенный текст (в том числе и файлы). Это полезно, если вы ищете команду, которой нет в истории (или у вас нет файла истории)

Вы можете прочитать больше об "освоении" файла истории здесь: http://www.thegeekstuff.com/2008/08/15-examples-to-master-linux-command-line-history/

Это возможный дубликат /programming/1030182/how-do-i-change-bash-history-completion-to-complete-whats-already-on-the-line

Vreality
источник
Другие ответы более правильно отвечают на мой вопрос, но спасибо за указатель на SO (см. Также meta.stackexchange.com/q/4708/172266 ).
gerrit