Поиск истории Bash, неравнодушный + стрелка вниз

Я искал, но не нашел что-либо на этом. Я ищу функциональность в ударе, с помощью терминала.

Путь назад, когда, у меня был пользователь в debian системе, и друг настроил меня с удобной функцией поиска истории (я полагаю, что использовал tcsh затем), где я введу начало предыдущей команды, поразить стрелку вниз, и это сделало бы поиск, на основе частичной строки.

Например, если моя история:

./script.pl
./script.pl arg1
cat output
cat output | grep yada

И я ввожу ., и нажмите стрелку вниз, она показала бы мне: ./script.pl arg1. Нажмите его снова, и это показало бы ./script.pl, и т.д.

Очень как он выполнил бы a grep на .bash_history. Существует ли способ получить эту функциональность?

192
задан 3 September 2011 в 05:11

7 ответов

Откройте свой ~/.inputrc. Если у вас нет этого файла, посмотрите в конце, как его создать. Добавьте эти строки:

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

Строки, начинающиеся с # - это комментарии. Я не могу вспомнить, что назад, а что вперед. Экспериментируйте с этим. Может быть, вам нужно переключиться назад и вперед.

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


Немного фоновой информации:

Бэш использует readline для работы с подсказкой. ~/.inputrc - это файл конфигурации для строки чтения. Обратите внимание, что это также вступит в силу в других программах, использующих библиотеку readline, например IPython.

Прочитайте руководство по использованию bash manual для получения дополнительной информации о readline. Там же Вы можете найти больше команд readline, связанных с историей .

Для получения экранирующих кодов клавиш со стрелками Вы можете сделать следующее:

  1. Пуск cat в терминале (только cat, больше никаких аргументов).
  2. Введите на клавиатуре клавиши, вы получите такие вещи как ^[[A для стрелки вверх и ^[[B для стрелки вниз.
  3. Замените ^[ на \e.

Если у вас еще нет файла ~/.inputrc, скопируйте настройки по умолчанию или все остальные привязки клавиш по умолчанию будут переопределены:

cp /etc/inputrc ~/.inputrc

или начните свой ~/. файл inputrc со следующей строкой

$include /etc/inputrc
231
ответ дан 22 November 2019 в 22:51

Существует альтернатива, аналогичная описанной выше в @lesmana, но вам не нужно создавать новый файл .inputrc.

Вместо этого, если у вас есть разрешения sudo, вы можете включить это в файле / etc / inputrc. В этом файле находятся различные настройки клавиатуры, включая функцию поиска по истории (по крайней мере, для 18.04). Отрывок из / etc / inputrc:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

Раскомментируйте две нижние строки с помощью редактора файлов sudo (например, $ sudo vim), и новый сеанс терминала будет иметь функцию поиска по истории (для всех пользователей). Таким образом, вам не нужно беспокоиться о создании файла ~ / .inputrc, и вам не нужно будет добавлять оператор $ include , как @Tulio Casagrande, упомянутый в комментариях, чтобы сохранить введенные вами ctrl-стрелки.

1
ответ дан 22 November 2019 в 22:51

Ctrl + R предоставит вам такую функциональность. Начните вводить частичную команду и она придумает старую, по которой можно перемещаться со стрелками вверх и вниз.

Дополнительная информация здесь.

14
ответ дан 22 November 2019 в 22:51

Создайте файл с именем setup_readline.sh с режимом 644 в / etc / profile. d / со следующим содержанием, войдите в систему и проверьте свои предпочтительные ключи:

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

Я думаю, что это лучший способ сделать это. В основном, если вы используете системы управления конфигурацией, такие как шеф-повар, марионетка и т. Д.

И конфигурация системы все еще нетронута!

36
ответ дан 22 November 2019 в 22:51

для завершения ответа лесмана относительно ~/.inputrc, который я должен создать под моим Доверенным 14. 04, verify/add в ~/.bashrc (первая строка уже существует в моей ~/.bashrc):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

Это уже объяснено по-французски здесь.

4
ответ дан 22 November 2019 в 22:51

Возможно, вы захотите попробовать https://github. com/dvorka/hstr, которая обеспечивает простую и многострочную простую фильтрацию истории Бэша, которая, основываясь на метрике (когда, как часто и длина команд имеет значение) - вы можете использовать клавиши со стрелками, чтобы легко перемещаться по истории:

enter image description here

Она может быть легко связана с Ctrl-r и/или Ctrl-s

3
ответ дан 22 November 2019 в 22:51

Следующее решение объединяет и расширяет некоторые из вышеупомянутых подходов: добавьте следующие строки в ваш файл ~ / .bash_aliases (нет необходимости в ~ / .inputrc ), чтобы добиться следующего поведения:

  1. перемещение вверх / вниз по истории ( только записи с таким же префиксом), нажав CTRL + UP и CTRL + DOWN. Это может сосуществовать со стандартной функциональностью перемещения вверх / вниз по всей истории с помощью только UP и DOWN
  2. переход к следующему / предыдущему слову в командной строке, нажав CTRL + RIGHT и CTRL + LEFT
bind '"\e[1;5A":history-search-backward'
bind '"\e[1;5B":history-search-forward'
bind '"\e[1;5C":forward-word'
bind '"\e[1;5D":backward-word'

Повторный вход в оболочку (или запустите source ./bash_aliases), чтобы применить изменения.

3
ответ дан 22 November 2019 в 22:51

Другие вопросы по тегам:

Похожие вопросы: